2015-05-09 77 views
4

如果賦值和數學運算中的每個操作數在執行表達式之前被提升爲int(如果它沒有L, f, d標誌);窄鑄造int到更小的類型

並且將int放入較小的原始類型(如byte)應該用narrow-casting完成;

那麼下面的分配是如何工作的?

byte a = 100; 

如果100是一個整數,所以把它放入一個字節需要鑄造。

+0

這是一個縮小的轉換,而不是鑄造;鑄造不會改變目標值。 – chrylis

回答

2
byte a = 100; 

此操作,因爲...

如果在assignment context右手側是常量表達式,

甲基本收縮轉換可以如果類型被使用的變量是byte,shortchar,並且常量表達式的值可以用變量的類型表示。

字面原始類型的[...]

是一個constant expression

而且range of a byte

[...]從-128127,包容性。

+0

感謝您的文檔鏈接 – mrdaliri

1

這是一個編譯時常量,編譯器可以確定它適合一個字節。實際上,這確實需要在舊版本的Java中進行縮小轉換。

+0

所以如果它是一個常量,編譯器知道它是否合適,但如果它是一個表達式,它會在執行結果後強制執行? – mrdaliri

2
byte a = 100; 

這工作,因爲在Java字節範圍爲-128 to 127,所以如果你高達127賦值,就沒有必要對投。

試着指定128,你會得到編譯器錯誤。

byte a = 128 ; //compiler error(incompatible type) 
byte a = (byte)128;