次のコードを検討してください。
System.out.println(1 + 0xFFFFFFFFL);
System.out.println(1L + 0xFFFFFFFF);
最初の行は、期待値 を出力します4294967296
。しかし、2 行目は0
. 両方の式のタイプを (メソッドに渡すことによって) チェックしたところ、両方ともlong
JVM によって認識されました。Lava 7 言語仕様では、二項演算について、「いずれかのオペランドが long 型の場合、もう一方は long 型に変換される」と規定されています。という感じですが、2点質問があります。
両方のオペランドが long になる場合、最初の式で上位ビットが切り捨てられるのはなぜですか?
なぜ順序が重要なのですか?