基础概念

所有的数据都是对象!!! 甚至包括函数也是对象.对象也分三六九种.

Scala所有的对象都继承自Any,这个Any比Java的Object还要高级.Object只是引用类型,但是Any又表示基本数据类型又表示引用数据类型.
Any有两个儿子,一个是AnyVal(值类型),一种是AnyRef(引用类型), AnyVal对应Java的基本类型的包装类.但是和Java比的话,多了两个类型 Unit(类型)和StringOps.

Unit(类型), 对应着java中的void, 只有一个值就是: () 圆括号, 一般用于方法或函数不需要返回值的时候的返回值,比如说main函数. 说白了就是以前Java里面用void的地方现在就用Unit来替换.

StringOps,看成是String的加强版.当使用java的String时候, 一些没有方法, 会自动从这个类型找(隐式转换)

AnyRef 是引用类型的意思,AnyVal值类型是对应来的,所有的Java的类到Scala都是AnyRef类型的,Scala里面所有的集合(Scala Collections)也是AnyRef子类,还有所有的其它的Scala的类(Other Scala classes)都是AnyRef类型的, 换一句话说就是除了AnyVal剩下都是AnyRef类型的,

Null在Java中可以给任何的引用类型赋值,但是在Scala里面的Null是所有的AnyRef的子类型,Null(Null的N大写说明是一个类,在Scala万物都是对象)只有一个值是null,这个null其实就是Java中的null,但是Java中的null是一个关键字,但是在Scala里面的null是一个类型的具体的对象
Nothing是Scala中所有类型的子类型,Nothing类是finally并且是抽象类(没子类不能实例化),仅仅是象征意义.用于辅助类型推导,一般用于非正常结束情况下的返回值(比如抛出异常的值就是Nothing).
01.数据类型关系总结 - 图1

Scala数据类型关系总结

1)Scala中一切数据都是对象,都是Any的子类。
2)Scala中数据类型分为两大类:数值类型(AnyVal)、引用类型(AnyRef),不管是值类型还是引用类型都是对象。
3)Scala数据类型仍然遵守,低精度的值类型向高精度值类型,自动转换(隐式转换)
4)Scala特殊的类型之Null,它只有一个实例就是Null,它是所有引用类型(AnyRef)的子类。
5)Scala特殊类型之Nothing,是所有数据类型的子类,主要在一个函数没有正常返回值使用,因为这样我们可以把抛出的返回值,返回给任何的变量或者函数。