Подтвердить что ты не робот

Почему не null.asInstanceOf [Int] бросает исключение NullPointerException?

Так как Int "не соответствует" AnyRef, я не уверен, почему он не бросает исключение NullPointerException в соответствии с Scala Ссылка в разделе 6.3:

asInstanceOf [T] возвращает сам объект "null", если T соответствует scala.AnyRef и выбрасывает исключение NullPointerException в противном случае

И не имеет значения null.asInstanceOf[Double], null.asInstanceOf[Boolean], null.asInstanceOf[Char].

PS: Моя библиотека scala имеет версию 2.9.0.1 и ОС Windows XP

4b9b3361

Ответ 1

В Scala Null - тип, который имеет одно значение Null. Поскольку Null - значение, и каждое значение в Scala является объектом, вы можете вызывать методы на нем.

Ответ 2

Действительно, это немного удивительно, учитывая раздел 6.3 описания языка как указано в билете huynhjl.

Поведение (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....)