6

インクリメント演算子と加算演算子を使用してバイト変数をインクリメントしようとするとどうなりますか。

public class A {
    public static void main(final String args[]) {
        byte b = 1;

        b++;

        b = b + 1;
    }
}

解き放たれたような小さなものを見つけることができるソースを教えてください。私を助けてください。

4

4 に答える 4

13

違いimplicit casting++演算子 from inttobyteに があることですが、explicitly使用する場合はそうする必要があります。b = b + 1

b = b + 1;  // Will not compile. Cannot cast from int to byte

明示的なキャストが必要です:

b = (byte) (b + 1);

一方b++、正常に動作します。演算子は、 値を に++自動的にキャストします。b + 1intbyte


これはJLSに明確にリストされています- §15.26.2 複合代入演算子: -

E1 op= E2 の形式の複合代入式は、E1 = (T) ((E1) op (E2)) と同等です。ここで、T は E1 の型ですが、E1 は 1 回だけ評価されます。


b + 1操作は type の結果を与えることに注意してくださいint。そのため、2 番目の代入で明示的なキャストが必要です。

于 2012-11-19T11:22:48.583 に答える
3

何が起こるのですか?実際b = b + 1にはコンパイルされません。

は に評価されるbyteため、明示的に に変換する必要があります。また、が に収まることは保証されません。b + 1intintbyte

b = (byte)(b + 1);

于 2012-11-19T11:18:51.523 に答える
0

変数は 2 回インクリメントされます

于 2012-11-19T11:18:24.263 に答える
0

b++; b=b+1; は同等であり、同じバイトコードになります。

b は、main メソッドが終了する前に 3 になります。

編集:実際にはそれらは同等ではありません: b=b+1; b=(byte) (b+1); は間違っています。[バイトにキャスト、それ以外は int ]

于 2012-11-19T11:19:07.373 に答える