インクリメント演算子と加算演算子を使用してバイト変数をインクリメントしようとするとどうなりますか。
public class A {
public static void main(final String args[]) {
byte b = 1;
b++;
b = b + 1;
}
}
解き放たれたような小さなものを見つけることができるソースを教えてください。私を助けてください。
インクリメント演算子と加算演算子を使用してバイト変数をインクリメントしようとするとどうなりますか。
public class A {
public static void main(final String args[]) {
byte b = 1;
b++;
b = b + 1;
}
}
解き放たれたような小さなものを見つけることができるソースを教えてください。私を助けてください。
違いはimplicit casting
、++
演算子 from int
tobyte
に があることですが、explicitly
使用する場合はそうする必要があります。b = b + 1
b = b + 1; // Will not compile. Cannot cast from int to byte
明示的なキャストが必要です:
b = (byte) (b + 1);
一方b++
、正常に動作します。演算子は、 値を に++
自動的にキャストします。b + 1
int
byte
これはJLSに明確にリストされています- §15.26.2 複合代入演算子: -
E1 op= E2 の形式の複合代入式は、E1 = (T) ((E1) op (E2)) と同等です。ここで、T は E1 の型ですが、E1 は 1 回だけ評価されます。
b + 1
操作は type の結果を与えることに注意してくださいint
。そのため、2 番目の代入で明示的なキャストが必要です。
何が起こるのですか?実際b = b + 1
にはコンパイルされません。
は に評価されるbyte
ため、明示的に に変換する必要があります。また、が に収まることは保証されません。b + 1
int
int
byte
b = (byte)(b + 1);
変数は 2 回インクリメントされます
b++; b=b+1; は同等であり、同じバイトコードになります。
b は、main メソッドが終了する前に 3 になります。
編集:実際にはそれらは同等ではありません: b=b+1; b=(byte) (b+1); は間違っています。[バイトにキャスト、それ以外は int ]