我对Scala中的Any
和AnyRef
类型之间的区别很好奇。为什么int属于AnyVal
,而string属于AnyRef
?
例如:
val a: AnyVal = 3
val b: AnyRef = "1"
我对Scala中的Any
和AnyRef
类型之间的区别很好奇。为什么int属于AnyVal
,而string属于AnyRef
?
例如:
val a: AnyVal = 3
val b: AnyRef = "1"
Any是所有类型的超类型。Any有两个直接子类:AnyVal和AnyRef。
AnyVal代表值类型。预定义了九种值类型,它们是非空的:Double、Float、Long、Int、Short、Byte、Char、Unit和Boolean。
AnyRef代表引用类型。所有非值类型都被定义为引用类型。Scala中每个用户定义的类型都是AnyRef的子类型。Scala中的String等同于Java中的java.lang.String,是AnyRef的子类型。
val b: AnyRef = "1"
,变量b
是不可变的,并被视为java.lang.Object数据类型。