美文网首页Android开发Android进阶Android开发经验谈
Kotlin基础类型——数值型之间的类型转换

Kotlin基础类型——数值型之间的类型转换

作者: 程序员丶星霖 | 来源:发表于2019-06-12 14:04 被阅读8次

    Kotlin是强类型语言,Kotlin的编译器对类型检查非常严格,以保证Kotlin程序的健壮性。

    一、整型之间的转换

    不同正想的变量能支持的表数范围是不同的。如果数值超出了变量所支持的表数范围,编译器就会报错。

    Kotlin不支持取值范围小的数据类型隐式转换为取值范围大的类型。它要求不同整型的变量或值之间必须进行显式转换。

    Kotlin提供了如下方法进行数值类型的转换:

    1. toByte():转换为Byte类型
    2. toShort():转换为Short类型
    3. toInt():转换为Int类型
    4. toLong():转换为Long类型
    5. toFloat():转换为Float类型
    6. toDouble():转换为Double类型
    7. toChar():转换为Char类型
        var bookPrice: Byte = 79
        var itemPrice: Short = 120
        //下面代码错误
    //    var a: Short = bookPrice
        var a: Short = bookPrice.toShort()
        var b: Byte = itemPrice.toByte()
        println("a:$a,b:$b")
    
        val amount = 233
        //将Int型变量转换为Byte类型,发生溢出
        val byteAmount: Byte = amount.toByte()
        println(byteAmount)
    

    输出结果为:

    a:79,b:120
    -23
    

    与Java类似,将取值范围大的变量或表达式强制转换为取值范围小的类型时,可能发生溢出。

    Char型值虽然不能被当成整数进行算术运算,但Kotlin为Char类型提供了加、减运算支持:

    • Char型值加、减一个整型值:Kotlin会先将该Char型值对应的字符编码进行加、减该整数,然后将计算结果转换为Char型值。
    • 两个Char型值进行相减:Kotlin将用两个Char型值对应的字符编码进行减法运算,最后返回Int类型的值。两个Char型值不能相加。
        var c1 = 'i'
        var c2 = 'k'
        println(c1 + 4)
        println(c1 - 4)
        println(c1 - c2)
    

    输出结果:

    m
    e
    -2
    

    二、浮点型与整型之间的转换

    Kotlin中Float和Double之间需要进行显式转换,浮点型和整型之间也要进行显式转换。

    将Double类型或Float类型的值、变量或常量转换为整型时,浮点值的小数部分会被截断。

    当进行类型转换时,应尽量向表数范围大的数据类型转换,这样程序会更加安全。

    Kotlin各数值型的表数范围由小到大的顺序为:Byte->Short->Int->Long->Float->Double。

        var width: Float = 2.3f
        var height: Double = 4.5
        var a: Double = width.toDouble()
        println("a的值为:$a")
        var area1 = width * height.toFloat()
        println(area1.javaClass)
        var area2 = width * height
        println(area2.javaClass)
        val multi: Int = 5
        var totalHeight1 = height * multi
        println(totalHeight1.javaClass)
        var totalHeight2 = height.toInt() * multi
        println(totalHeight2.javaClass)
    

    输出结果:

    a的值为:2.299999952316284
    float
    double
    double
    int
    

    三、表达式类型的自动提升

    当一个算术表达式中包含多个数值型的值时,整个算术表达式的数据类型将发生自动提升。(与Java基本相似的自动提升规则)

    • 所有的Byte、Short类型将被提升到Int类型
    • 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。
        var b: Byte = 40
        var c: Short = 97
        var i: Int = 23
        var d: Double = .314
    
        val result = b + c + i * d
        println(result)
    

    输出结果:

    144.222
    

    表达式的类型将严格保持和表达式中最高等级操作数相同的类型。

    如果表达式中包含了字符串,应该注意输出的结果,如下例:

        println("Hello!"+'a'+7)
        println('a'+7+"Hello!")
    

    输出结果:

    Hello!a7
    hHello!
    

    第一个表达式先进行"Hello!"+'a'运算,拼接成字符串Hello!a;再进行"Hello!a"+7运算,也是一个字符串的拼接,得到Hello!a7

    第二个表达式,先进行'a'+7加法运算,对Char型值做加法运算,将会得到'a'后面的第7个字符,即'h';接着进行'h'+"Hello!"运算,从而得到hHello!。

    学海无涯苦作舟

    我的微信公众号.jpg

    相关文章

      网友评论

        本文标题:Kotlin基础类型——数值型之间的类型转换

        本文链接:https://www.haomeiwen.com/subject/drhsxctx.html