2012-07-05 81 views

回答

1

这些类型都扩展了AnyVal,对于这些类型,赋值不能为null,为什么它会将它们转换为零以响应asInstanceOf,但会转义我。它似乎只是在REPL中这样做,然而这是一个稍微特殊的情况。在真实的代码中它返回null。

+0

我没有尝试由自己“真正”的代码,但是这是我的同事在“真正的”代码注意到的行为。 – Michael

3

原因是,null是一个参考类型 - 铸造总是转换为另一个参考类型 - 在这种情况下盒装版本IntDouble

在下一步中,编译器将装箱对象转换为原始值。如果盒装的Int对象是null,则其对应的默认原始值是0

参见:If an Int can't be null, what does null.asInstanceOf[Int] mean?

+0

谢谢。它是否符合语言规范? – Michael

+0

不确定在默认值之间转换的部分。 – axel22

+0

是的,它看起来像这个部分与规范相矛盾(见尼古拉斯的回答) – Michael