由于Int“不符合”AnyRef,我不知道为什么它不会在第6.3节中根据Scala Reference抛出NullPointerException:
如果T符合,则asInstanceOf [T]返回“null”对象本身 scala.AnyRef,否则抛出NullPointerException
null.asInstanceOf[Double]
,null.asInstanceOf[Boolean]
,null.asInstanceOf[Char]
都没有。
PS:我的scala库是版本2.9.0.1和OS Windows XP
答案 0 :(得分:5)
在Scala中Null
是一种类型,它具有单个值null
。由于null
是一个值,Scala中的每个值都是一个对象,因此可以在其上调用方法。
答案 1 :(得分:-1)
考虑到huynhjl的票证中language spec的第6.3节,确实有点令人惊讶。
另一方面,行为(null.asInstanceOf[Int]
给你0
)与以下观察结果有些一致:
new Array[AnyRef](3) // -> Array(null, null, null)
new Array[Int ](3) // -> Array(0, 0, 0)
因此,当您希望为类型X
设置“值”时,即使您没有可用的特定值,也可能在通用类中很有用。如在第二个观察中:
class X[A] {
var value: A = _
}
new X[Int].value // -> 0 (even if X is not specialized in A, hmmm....)