次のシナリオでは、Javaの動作を理解するのが難しいです。たとえば、私は単純に2つのint値を乗算し、結果を画面に出力する乗算方法を持っています。整数オーバーフローでパラメータ型を割り当てる効果
private static void multiply() {
int firstValue = Integer.MAX_VALUE;
int secondValue = 2; //double secondValue=2
double result = firstValue * secondValue;
System.out.println("Result is: " + result);
}
となり、整数オーバーフローが発生するため、結果は-2になります。ただし、ここで計算結果はdoubleに代入され、firstValueとsecondValueの乗算よりもはるかに大きな値を受け入れます。
この問題に対する私の質問は次のとおりです。
結果が倍精度に割り当てられても、整数オーバーフローが発生するのはなぜですか?
2番目の値の型をdoubleに変更すると(コメントに記載されている)、結果は正しいです。乗数の型がdoubleに変更されたとき、Javaの動作が異なるのはなぜですか?
計算は整数として行われ、結果は計算後にdoubleにキャストされます。だからあなたのintが2倍の時に結果が得られるMAX_VALUEがあります。 – baao
乗算には整数しか含まれていないので、整数乗算として行われます。一度だけ実行されると、結果はdoubleに変換されますが、その時点ではすでに遅すぎます。乗算の値の1つをキャストします。 – Robert