结果null.asInstanceOf [Int]为0

Tom*_*Tom 0 scala

当我跑步时null.asInstanceOf[Int],我很惊讶地发现结果为0,我会问为什么它为0,我认为它应该为空

Ale*_*nov 5

我以为它应该是null

它不能是null因为Int没有null价值.如果你尝试null: Int(类型归属而不是强制转换),你可以看到它,虽然错误信息是丑陋的.

为什么它是0

因为它是在http://scala-lang.org/files/archive/spec/2.12/06-expressions.html#the-null-value中以这种方式定义的:

asInstanceOf[T][on null]返回type的默认值T.

有趣的是,它过去被定义为抛出NullPointerException,但实际上是以当前的方式实现的,因此规范发生了变化:https://issues.scala-lang.org/browse/SI-5236