2016-06-19 122 views
3

這是我的代碼:爲什麼B = B + 1當B是字節不會編譯,但B + = 1編譯

class Example{ 
    public static void main(String args[]){ 
     byte b=10; 
     //b=b+1; //Illegal 
     b+=1; //Legal 
     System.out.println(b); 
    } 
} 

我想知道爲什麼我得到一個編譯錯誤,如果我使用b=b+1,但另一方面b+=1編譯正確,而他們似乎做同樣的事情。

+0

你是說編譯器並沒有「說明理由」您????? –

+0

錯誤 - >(不兼容的類型:從int到byte的可能有損轉換)。但在這種情況下「b + = 1」在這種情況下,編譯器如何做到這一點 –

回答

5

這是一個有趣的問題。見JLS 15.26.2. Compound Assignment Operators:形式E1 op= E2

的化合物賦值表達式是等效於 E1 = (T) ((E1) op (E2)),其中TE1類型,不同之處在於E1 只計算一次。

所以,當你正在編寫b+=1;,你實際上是鑄造結果爲byte,這是類似的表達如(byte)(b+1)和編譯器會知道你在說什麼。相反,當您使用b=b+1時,您將添加兩種不同的類型,因此您將得到一個Incompatible Types Exception

0

因爲不能轉換的int字節

可以嘗試:

B =(字節)(B + 1);

+0

「b + = 1」它是如何工作的? –

+0

b + = 1等於b =(字節)(b + 1); – ThiepLV

1

您得到的錯誤是由於使用不同數據類型的操作而導致溢出。

,當你這樣做:

byte b = 127; 
b=b+1; 

你產生溢出,因此該解決方案將被鑄造的結果

b=(byte) (b+1); 
相關問題