1、数值类型自动转换

当Scala程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型,这个就是自动类型转换(隐式转换)。数据类型按精度(容量)大小排序为:
image.png
说明:

  1. 自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。
  2. 把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动进行类型转换。
  3. byte,shortchar之间不会相互自动转换。
  4. byte,short,char他们三者可以计算,在计算时首先转换为int类型。

Scala 还提供了非常强大的隐式转换机制(隐式函数,隐式类等)(留链接)

2、强制类型转换

  • 将数据由高精度转换为低精度,就需要使用到强制转换
  • 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级

    使用强转函数,有可能会造成精度的降低或溢出

精度降低或溢出

  1. val n:Int =130
  2. val b:Byte= n.toByte
  3. println(b)
  4. // -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