[英]why doesn't null.asInstanceOf[Int] throw a NullPointerException?
由於Int“不符合” AnyRef,所以我不確定為什么根據6.3節中的Scala參考 ,它不會引發NullPointerException:
如果T符合scala.AnyRef,則asInstanceOf [T]返回“ null”對象本身,否則拋出NullPointerException
而且null.asInstanceOf[Double]
, null.asInstanceOf[Boolean]
和null.asInstanceOf[Char]
。
PS:我的Scala庫的版本為2.9.0.1,並且OS Windows XP
在Scala中, Null
是一種類型,具有單個值null
。 由於null
是一個值,而Scala中的每個值都是一個對象,因此可以在其上調用方法。
實際上,考慮到票證中huynhjl指出的語言規范的 6.3節,這有點令人驚訝。
null.asInstanceOf[Int]
,行為( 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....)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.