2 回答

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊
從JLS 5.2分配轉(zhuǎn)換
另外,如果該表達(dá)式是類(lèi)型為byte,short,char或int的常量表達(dá)式(第15.28節(jié)):-如果變量的類(lèi)型為byte,short或char,且值是常數(shù)表達(dá)式的可以表示為變量的類(lèi)型。
簡(jiǎn)而言之,表達(dá)式的值(在編譯時(shí)就知道了,因?yàn)樗且粋€(gè)常量表達(dá)式)可以用字節(jié)類(lèi)型的變量表示。
考慮你的表情
final byte x = 1;
final byte y = 2;
byte z = x + y;//This is constant expression and value is known at compile time
因此,由于求和適合字節(jié),因此不會(huì)引發(fā)編譯錯(cuò)誤。
現(xiàn)在,如果你這樣做
final byte x = 100;
final byte y = 100;
byte z = x + y;// Compilation error it no longer fits in byte

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
byte z = x + y; // x and y are declared final
在這里,由于x和y被聲明,final所以RHS在編譯時(shí)就知道的表達(dá)式的值,該值固定為(1 + 2 = 3)并且不能改變。因此,您無(wú)需明確地進(jìn)行類(lèi)型轉(zhuǎn)換
byte c = a + b; // a and b are not declared final
但是,在這種情況下,a和的值b未聲明為最終值。因此,表達(dá)式的值在編譯時(shí)未知,而是在運(yùn)行時(shí)求值。因此,您需要進(jìn)行顯式轉(zhuǎn)換。
但是,即使在第一個(gè)代碼中,如果的值a + b超出范圍-128 to 127,它也將無(wú)法編譯。
final byte b = 121;
final byte a = 120;
byte x = a + b; // This won't compile, as `241` is outside the range of `byte`
final byte b1 = 12;
final byte a1 = 12;
byte x1 = a1 + b1; // Will Compile. byte can accommodate `24`
添加回答
舉報(bào)