整数パラメータ式は整数を返します
以下のコードは foo の値を -1149239296
にします 私。 e. integer
範囲外の値:
int bar = 3000; long foo = bar * 1024 * 1024;
Java
のようです type
かかります 最初のパラメータの値を取得し、その type
で式の結果を返そうとします .Java
のどこに その話が読めるか?
私はそのような提案をしました
int bar = 3000; long foo = (long)bar * 1024 * 1024;
実際にはセット long
を返します 値を foo
に変更 .
答え
この場合、int
のいずれかをキャストします。 リテラルを long
に 動作します。しかし、途中でオーバーフローが発生する可能性がある長いチェーンの演算子では、結合性が重要になります。 *
JLS セクション 15.17 によると、演算子は左結合であるため、最初のリテラルは long
にする必要があります。 int
のオーバーフローを避けるため 最初からです。他の数学関連の演算子も左結合です。
リテラルの 1 つだけが long
である理由 バイナリ数値昇格のために必要です 、JLS のセクション 5.6.2。少なくとも int
より狭いタイプをより広いタイプに昇格します。 .