浅谈Kotlin编程-Kotlin数据类型转换

1,144 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情

前言

编程语言中,数据类型转换是很常见的,之前学过的C/C++,Java语言都接触过数据类型转换。将一种数据类型的值赋给另一种不同的数据类型的变量时,就需要进行类型转换。本篇就来学习一下 Kotlin 中的类型转换的知识,它可分为两种:智能类型转换强制类型转换

本文总览

Kotlin数据类型转换.png

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类型,通过打印运行结果可以判断aString类型。

2. 强制类型转换

在Kotlin中,某些特殊情况下无法进行常规类型转换时,可进行强制类型转换。
强制类型转换主要通过asas?操作符进行。

  1. 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类型。

  1. 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)一起进步,一起成长!