1

以下の 3 つのビットごとの左シフト コード フラグメントでは、興味深いのは、例 #2 と #3 が Java によって異なる方法で処理されていることです。最後の例 (#3) で、Java が複合代入ステートメントを int にアップグレードしないと決定したのはなぜですか?

答えは、Javaが「インライン」で行うことに関係がありますか。コメントありがとうございます。

byte b = -128;

// Eg #1.  Expression is promoted to an int, and its expected value for an int is -256.
System.out.println(b << 1);

b = -128;
// Eg #2.  Must use a cast, otherwise a compilation error will occur.  
// Value is 0, as to be expected for a byte.
System.out.println(b = (byte)(b << 1));

b = -128;
// Eg #3.  Not only is no cast required, but the statement isn't "upgraded" to an int.
// Its value is 0, as to be expected for a byte.
System.out.println(b <<= 1);
4

2 に答える 2