Java >> Java チュートリアル >  >> Tag >> return

整数パラメータ式は整数を返します

以下のコードは 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 より狭いタイプをより広いタイプに昇格します。 .


Java タグ