携手创作,共同成长!这是我参与「掘金日新计划 · 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)一起进步,一起成长!