无论是强类型的编程语言(如Java),还是弱类型的编程语言(如PHP),都会进行类型转换,Kotlin 也不例外,它提供了5 种数据类型转换方式,即智能转换、不安全转换、安全转换、显式转换和隐式转换。
【例2.12】 数据类型的检查和转换。
运行结果如下:
智能转换:在Kotlin中不需要使用转换操作符进行操作,因为编辑器会跟踪不可变值的 is 来进行检查,并且在需要时会自动插入进行安全转换。比如 var a:Int=10,如果将Int类型更改为String类型,此时在编辑器中在String下面会出现红色波浪线,将鼠标指针放上去,则会提示“Incompatible Types:String and Int”,表示该变量定义出现错误。解决方法是,更改等号左边的值,用双引号引起来,表示该值为字符串类型,或者将String类型改成Int类型。虽然编辑器可以自动识别数据类型,但还是有一定局限性的——无法识别被open关键字修饰的属性,或者自定义getter属性的val值;无法识别被修改的var局部变量;var 变量永远无法识别(因为该变量随时在被其他代码更改)。
不安全转换:通常可以进行转换,但是如果碰到不可能被转换的情况或者为Null值时,则会抛出异常,不建议转换。如val a:String=b as String。
安全转换:为了避免不安全转换抛出异常,可以使用转换操作符as?。如val b:String?=a as?String,当转换失败时会返回Null,虽然右边是一个非空的字符串,但是返回的也是空值。
显式转换:因为不能将较小的数据类型隐式转换为较大的类型,这就意味着程序无法继续执行,所以每个数字都支持进行类型转换。在Kotlin中提供的数字转换函数如表2-3所示。
表2-3
续表
隐式转换:在运算的过程中进行转换,如val a=1L+3。