2012-07-05 79 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