携手创作,共同生长!这是我参加「日新方案 8 月更文应战」的第7天,点击查看活动详情
前言
编程言语中,数据类型转化是很常见的,之前学过的C/C++,Java言语都触摸过数据类型转化。将一种数据类型的值赋给另一种不同的数据类型的变量时,就需要进行类型转化。本篇就来学习一下 Kotlin 中的类型转化的知识,它可分为两种:智能类型转化和强制类型转化。
本文总览
1. 数据类型检测
在Kotlin中运用is
或!is
操作符来检测目标的类型与指定类是否一致,这样就会避免由于类型不一致而呈现类型转化反常 ClassCastException
。
语法格局如下:
var a:Boolean = varObj is AClass
var b:Boolean = varObj !is AClass
上述语法格局中,varObj 为变量,AClass 为数据类型。
示例代码如下:
fun main() {
var a:Any = "hello"
var result1 = a is String // 运用 is 操作符
var result2 = a !is String // 运用 !is 操作符
println("result1 = " + result1)
println("result2 = " + result2)
}
运转成果:
result1 = true
result2 = false
上述代码中,Any
类型(类似于Java中的Object
类型,表明任意类型)的变量a
,分别经过is
和!is
运算符判别a
是否为String
类型,经过打印运转成果能够判别a
是String
类型。
2. 强制类型转化
在Kotlin中,某些特别情况下无法进行常规类型转化时,可进行强制类型转化。
强制类型转化主要经过as
与as?
操作符进行。
-
as
操作符
运用as
操作符进行强制类型转化,示例如下:
fun main() {
var a = "1"
var b: String = a as String // 字符串类型变量a 强制转化为String 类型
print("变量b的长度 = " + b.length)
}
运转成果:
变量b的长度 = 1
示例代码中,界说一个变量a,赋值为字符串“1”,并没有指定a的数据类型,经过as
操作符把 a 强制转化为String类型,并将 a 赋值给一个String类型的变量 b,最后打印 b的长度。
再来一个Int类型强制转化为String类型的示例演示:
只将变量 a的值设置为整数1,其他不变,如下所示:
fun main() {
var a = 1
var b: String = a as String // 将 Int类型的变量a 强制转化为String 类型
print(b.length)
}
运转成果:
Exception in thread"main"java.lang.ClassCastException:java.lang.Integer cannot be cast to java.lang.String
at HelloWorldKt.main(HelloWorld.kt:4)
上述在编译进程并不会报错,但在程序运转时会抛出一个类型转化的反常信息“java.lang.Integer cannot be cast to java.lang.String”
,不能把Integer类型的变量强制转化为String类型。
依据上述错误信息可知,在Kotlin中,Integer类型不能运用 as
操作符强制转化为String
类型。
-
as?
操作符
前面示例,运用as
操作符进行强制类型转化,若转化错误,程序会抛出反常。Kotlin中供给了安全转化类型的操作符as?
。用as?
操作符进行类型转化,若转化失利,则直接返回null,不会抛反常。
as?
操作符进行强制类型转化,示例如下。
fun main() {
var a = 1
var b: String? = a as? String // 将Integer变量a 强制转化为String 类型
print(b?.length)
}
运转成果:
null
示例代码中,var b:String?
是声明一个可空的变量b,经过as?
操作符将Integer类型变量a
强制转化为String类型,最后打印输出字符串的长度。依据运转成果为null可知,Integer类型变量不能经过操作符as?
强制转化为String。
3. 智能类型转化
Kotlin的编辑器非常智能,能辨认is和!is
操作符,经过这两个操作符,能判别出目标是否归于is或者!is
后边的数据类型。示例如下:
fun main() {
var a: Any = "hello"
if (a is String) {
println("a is String")
println(" 字符串长度:"+a.length) // 操作时,a 主动转化为String 类型
} else if (a !is Int) {
println("a !is Int")
} else {
println("don't know")
}
}
运转成果:
a is String
字符串长度:5
在示例中,界说一个Any
类型变量a,运用is
操作符进行判别时,编辑器能够智能判别出 a 实际上存储的是一个String类型的数据,会主动将 a 转化为String类型。
总结
关于Kotlin中数据类型转化,只要熟悉常用几个转化操作符,很好把握。
在(JUEJIN)一同进步,一同生长!