scala中的数据类型在java中都能找到对应的,他们之间最大的区别是scala中的数据类型全部都是对象,并没有类似于java原生类型这样的东西。 scala的基础数据类型分为值类型(AnyVal)与引用类型(AnyRef),他们都有一个共同的父类=>Any,引用类型都有一个共同的子类=>Null,所有类型都有一个共同的子类=>Nothing。
这张图表现了scala数据类型的两大特点:
同一数据类型同一底层在Scala中值类型和引用类型都是对象,不存在包装类这种东西。
类型转换遵循的规则和Java一致。 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。 例如:
val a:Double = 5.6 val b:Int = 3 val c = a+b println(c.getClass.getSimpleName) //doublebyte,short,char 他们三者可以计算,在计算时首先转换为int类型。
将精度大的类型转换为精度小的类型,有可能发生精度的损失。 当进行数据的 从 大——>小,就需要使用到强制转换。 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级。 Char类型可以保存 Int的常量值,但不能保存Int的变量值,需要强转。 Byte和Short类型在进行运算时,当做Int类型处理。 例如:
val a:Double = 5.6 val b:Int = 3 val c = (a+b).toInt println(c.getClass.getSimpleName) //Int