如果賦值和數學運算中的每個操作數在執行表達式之前被提升爲int
(如果它沒有L, f, d
標誌);窄鑄造int到更小的類型
並且將int
放入較小的原始類型(如byte
)應該用narrow-casting
完成;
那麼下面的分配是如何工作的?
byte a = 100;
如果100是一個整數,所以把它放入一個字節需要鑄造。
如果賦值和數學運算中的每個操作數在執行表達式之前被提升爲int
(如果它沒有L, f, d
標誌);窄鑄造int到更小的類型
並且將int
放入較小的原始類型(如byte
)應該用narrow-casting
完成;
那麼下面的分配是如何工作的?
byte a = 100;
如果100是一個整數,所以把它放入一個字節需要鑄造。
byte a = 100;
此操作,因爲...
如果在assignment context右手側是常量表達式,
甲基本收縮轉換可以如果類型被使用的變量是
byte
,short
或char
,並且常量表達式的值可以用變量的類型表示。
凡
字面原始類型的[...]
[...]從
-128
到127
,包容性。
感謝您的文檔鏈接 – mrdaliri
這是一個編譯時常量,編譯器可以確定它適合一個字節。實際上,這確實需要在舊版本的Java中進行縮小轉換。
所以如果它是一個常量,編譯器知道它是否合適,但如果它是一個表達式,它會在執行結果後強制執行? – mrdaliri
byte a = 100;
這工作,因爲在Java字節範圍爲-128 to 127
,所以如果你高達127賦值,就沒有必要對投。
試着指定128
,你會得到編譯器錯誤。
byte a = 128 ; //compiler error(incompatible type)
byte a = (byte)128;
這是一個縮小的轉換,而不是鑄造;鑄造不會改變目標值。 – chrylis