Kotlin是强类型语言,Kotlin的编译器对类型检查非常严格,以保证Kotlin程序的健壮性。
一、整型之间的转换
不同正想的变量能支持的表数范围是不同的。如果数值超出了变量所支持的表数范围,编译器就会报错。
Kotlin不支持取值范围小的数据类型隐式转换为取值范围大的类型。它要求不同整型的变量或值之间必须进行显式转换。
Kotlin提供了如下方法进行数值类型的转换:
- toByte():转换为Byte类型
- toShort():转换为Short类型
- toInt():转换为Int类型
- toLong():转换为Long类型
- toFloat():转换为Float类型
- toDouble():转换为Double类型
- 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!。
网友评论