Scala语言基础-数据类型

    技术2022-07-12  82

    与Java对比

    scala中的数据类型在java中都能找到对应的,他们之间最大的区别是scala中的数据类型全部都是对象,并没有类似于java原生类型这样的东西。 scala的基础数据类型分为值类型(AnyVal)与引用类型(AnyRef),他们都有一个共同的父类=>Any,引用类型都有一个共同的子类=>Null,所有类型都有一个共同的子类=>Nothing。

    这张图表现了scala数据类型的两大特点:

    同一数据类型同一底层

    特殊的数据类型

    数据类型特点描述Any类型Any 是所有类型的超类型,也称为顶级类型它定义了一些通用的方法如 equals、hashCode 和 toStringUnit类型Unit 用来标识没有明确返回值的函数Unit只有一个实例值,()Null类型Null 是所有引用类型的子类型Null 主要是使得 Scala 满足和其他 JVM 语言的互操作性,但是几乎不应该在 Scala 代码中使用Nothing类型Nothing 是所有类型的子类型,也称为底部类型。没有一个值是 Nothing 类型的。它的用途之一是给出非正常终止的信号,如抛出异常、程序退出或者一个无限循环

    在Scala中值类型和引用类型都是对象,不存在包装类这种东西。

    隐式类型转换

    类型转换遵循的规则和Java一致。 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。 例如:

    val a:Double = 5.6 val b:Int = 3 val c = a+b println(c.getClass.getSimpleName) //double

    byte,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
    Processed: 0.016, SQL: 9