快捷搜索: 王者荣耀 脱发

Kotlin学习2.9:变量的类型转换


在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从基础到实践》

经验分享 程序员 微信小程序 职场和发展