
42 第
2
章
more type conversions
小心溢出
试图将一个大的数值放入一个容量较小的变量中就好比试
图将桶装咖啡倒入小茶杯中。有些咖啡会被倒入茶杯中,
但是有些会溢出。
假如你想将Long的值放入Int中。正如我们之前所提到
的,Long可以容纳比Int更大的数字。
因此如果Long的值在Int可存储的范围之内,那么从Long
转换为Int是没有问题的。例如,将一个值为
42
的Long转
换为Int将得到一个值为
42
的Int:
var x = 123.456
var y: Int = x.toInt() //值为123
var x = 1234567890123
var y: Int = x.toInt() //值为1912276171!
这里的关键是,当你进行数值类型之间的相互转换时,请确保
你想转换的类型能够存储当前的变量值,否则你的代码可能会
得到意外的结果。
至此,你已经了解了变量的工作原理并且对
Kotlin
的基本类型有
了一定的经验。请尝试完成下面的练习。
这涉及数值正负
、
位运算
、
二进制等其他一些计算
机知识
,
在此不赘述
。
如果你对此感兴趣
,
可以搜
索
“
2
的补数
”。
var x = 42L
var y: Int = x.toInt() //值为42
但是如果Long的值超出了Int能容纳的范围,那么编译
器将会舍弃超出的部分,此时你会得到一个奇怪(仍可计
算)的数值。例如,当你将一个值为
1 234 567 890 123
的
Long转换为Int时,你的Int变量的值会为
1 912 276 171
。
编译器假设这是你有意而为之,因此可以正常编译。如果你希望 ...