Kotlin学习2.9:变量的类型转换
- 类型检查
- 智能类型转换
- 强制类型转换
-
- as操作符
- as?操作符
在Kotlin中,如果将一种数据类型的值赋给另一种不同的数据类型的变量时,则需要进行数据类型转换。
根据转换方式的不同,数据类型转换可分为两种:智能类型转换和强制类型转换。
类型检查
为了避免变量在进行类型转换时,由于类型不一致而出现类型转换异常的问题,可以使用is操作符或!is反向操作符进行检测对象是否是特定类的一个实例。
代码格式如下:
var a:Boolean = someObj is Class
var a:Boolean = someObj !is Class
为了让大家理解is和!is操作符的使用,接下来通过一段代码进行演示:
fun main(args:Array<String>) {
var a:Any = "hello"
var result1 = a is String
var result2 = a !is String
println(result1)
println(result2)
}
智能类型转换
在Kotlin中,同样也需要进行类型转换,不过Kotlin编辑器非常智能,它能识别is和!is操作符,通过这两个操作符,能判断出当前对象是否属于后面的数据类型。
如果当前对象属于后面的数据类型,则在使用该对象时可以自动进行智能类型转换。
代码如下:
fun main(args:Array<String>) {
var a:Any = "hello"
if (a is String){
println("a is String")
//操作时,a自动转换为String类型
println("the length of a : " + a.length)
}else if (a !is Int){
println("a !is Int")
}else{
println("I do not know")
}
}
强制类型转换
在Kotlin程序中,在某些特殊情况下无法进行智能类型转换时,还可以进行强制类型转换,强制类型转换主要是通过as和as?操作符进行的。
as操作符
fun main(args:Array<String>) {
var a = "1"
var b:String = a as String //无类型a强转为String类型
println(b.length)
}
接下来我们再来演示一下Int类型强制转换为String类型的情况:
fun main(args:Array<String>) {
var a = 1
var b:String = a as String //Int类型a强转为String类型
println(b.length)
}
运行报错:
根据上述代码运行时出现的错误可知,在Kotlin程序中,Int类型的变量不能使用as操作符强制转化为String类型。
as?操作符
根据前面的例子可知,使用as操作符进行强制类型转换时,如果转换错误,程序会报错并抛出异常。
为了避免这种情况出现,Kotlin提供了安全转换类型的操作符“as?”。
使用“as?”操作符进行类型转换时,如果转换失败,则会返回null,不会抛出异常。
代码如下:
fun main(args:Array<String>) {
var a = 1
var b:String? = a as? String //Int类型a强转为String类型
println(b?.length)
}
博客为个人收集学习,供大家交流学习。
参考书籍:《Kotlin从基础到实践》