15
在自動裝箱常數int
和short
類型到Byte
沒有錯誤,但與long
類型有常量錯誤。爲什麼?爲什麼在自動裝箱最後長時間出現字節編譯錯誤,但最終整數字節是好的?
final int i = 3;
Byte b = i; // no error
final short s = 3;
Byte b = s; // no error
final long l = 3;
Byte b = l; // error
我很好奇,爲什麼。這可能與長詞是否是機器語言有關? –
可能主要是因爲'int'是常量值的默認類型,包括表達式,所以會有像'short s = 123'這樣的代碼_lot_,如果沒有使用這樣的縮小轉換,則需要到處。特別是,Java沒有針對類型較窄的文字的語法。另一方面,如果表達式的類型明確地爲'long',因爲'L'已經用於常量或者某個部分是常量,那麼縮小它可能是錯誤的,並且這種情況很少見比'int'情況下,我猜想餘額有利於使其成爲一個錯誤。 – BeeOnRope
還要注意,自動裝箱並沒有太多的關係:同樣的事情適用於純粹的原始類型。這些規則只是擴展到包含添加到盒裝類型時的賦值。 @JonathanRosenne – BeeOnRope