类
图片展示了
Scala
的类层次结构。每一个类都继承自scala.Any
,Any
的子类可以划分为两个主要的范畴:值类型,继承自scala.AnyVal
;引用类型,继承自scala.AnyRef
。每一种Java
的基本数据类型对应于值类型,通过预定义的类型别名进行映射,而AnyRef
则对应于Java
环境中的根类:java.lang.Object
。需要注意的是值类型类空间是平行的,即所有的值类型都继承自
scala.AnyVal
,但是值类型之间不存在任何关系,比如继承关系。作为替代,值类型之间有视图(隐式类型转换)。整个类层次最底层有两个类型,
scala.Null
和scala.Nothing
。Null
是所有引用类型的子类,它只有一个实例null
。由于Null
不是任何值类型的子类,所以null
也不是任何值类型的实例,因此把null
赋值给int
型变量是错的。Nothing
是所有其它类型的子类,这个类没有任何实例,但是它可以作为类型参数体现价值,比如Nil
就是List[Nothing]
的实例,而Scala
中List
是协变的,从而对于所有的类型T
,Nil
都是List[T]
的实例。测试List
是协变的代码如下:
class Person
class Student extends Person
val lst: List[Person] = List[Student](new Student) //程序没有问题,可以说明List是协变的
关于
==
,equals
,eq
:在Scala
中,==
相当于是equals
的别名,用于比较值是否相等,而eq
用于比较引用是否相等:
val a = List(1, 2, 3)
val b: List[Int] = List(1, 2, 3)
println(a == b) //true
println(a equals b) //true
println(a eq b) //false
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。