1、数值类型自动转换
当Scala程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型,这个就是自动类型转换(隐式转换)。数据类型按精度(容量)大小排序为:
说明:
- 自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。
- 把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动进行类型转换。
byte,short
和char
之间不会相互自动转换。byte,short,char
他们三者可以计算,在计算时首先转换为int类型。
Scala 还提供了非常强大的隐式转换机制(隐式函数,隐式类等)(留链接)
2、强制类型转换
- 将数据由高精度转换为低精度,就需要使用到强制转换
- 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
使用强转函数,有可能会造成精度的降低或溢出
精度降低或溢出
val n:Int =130
val b:Byte= n.toByte
println(b)
// -126
128 : Int类型,占据4过个字节,32位
原码:0000 0000 0000 0000 0000 0000 1000 0000
补码:0000 0000 0000 0000 0000 0000 1000 0000
截取最后一个字节,Byte
得到补码 1000 0000
表示最大负数-128
130 :Int类型,占据4过个字节,32位
原码:0000 0000 0000 0000 0000 0000 1000 0010
补码:0000 0000 0000 0000 0000 0000 1000 0010
截取最后一个字节,Byte
得到补码 1000 0010
对应原码 1111 1110
表示最大负数-126