携手创作,共同生长!这是我参加「日新方案 8 月更文应战」的第7天,点击查看活动详情

前言

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

本文总览

浅谈Kotlin编程-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类型,经过打印运转成果能够判别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)一同进步,一同生长!