2016-06-19 3 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

をキャスティングすることになる

byte b = 127; b=b+1; 

あなたはコンパイラがために、「理由を説明し、」なかったことを言っています君は????? –

+0

エラー - >(互換性のない型:intからbyteへの不可逆変換が可能です)。しかし、この場合 "b + = 1"はどのようにコンパイラを実行するのですか? –

答えて

5

これは興味深い質問です。 JLS 15.26.2. Compound Assignment Operators参照:フォームE1 op= E2

複合代入式は E1 = (T) ((E1) op (E2))に相当し、Tは一度だけ評価されるE1 除き、E1のタイプです。

あなたがb+=1;を書いているときに、あなたが実際に(byte)(b+1)とコンパイラとして表現類似している、byteに結果をキャストしているあなたが話しているか知っているだろう。対照的に、b=b+1を使用すると、2種類のタイプが追加されるため、Incompatible Types Exceptionとなります。

0

バイトにint型に変換することはできません

あなたが試すことができますので:

B =(バイト)(B + 1);

+0

"b + = 1"この場合どのように動作するのですか? –

+0

b + = 1と等しいb =(バイト)(b + 1)。 – ThiepLV

1

エラーは、異なるデータ型の操作が原因で発生し、オーバーフローが発生する可能性があります。

あなたはこれを行うとき:あなたがオーバーフローを発生させるので、解決策は、結果

b=(byte) (b+1); 
関連する問題