Android开发Android进阶Android开发经验谈

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

2019-06-12  本文已影响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类型提供了加、减运算支持:

    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基本相似的自动提升规则)

    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
上一篇下一篇

猜你喜欢

热点阅读