簡體   English   中英

為什么null.asInstanceOf [Int]不拋出NullPointerException?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM