我在以下方案中難以理解java的行爲。例如,我有一個乘法方法,它只是乘以兩個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的乘法大得多的值。
我對這個問題的問題是;
1-爲什麼整數溢出發生,雖然結果被分配給一個double?
2-當我將secondValue的類型更改爲double(在註釋中提到)時,結果是正確的。爲什麼Java的行爲不同時,其中一個乘數的類型改爲double?
計算是以整數形式進行的,只有在計算後纔會將結果轉換爲double。所以有一個時刻你的int是MAX_VALUE的兩倍,這會產生你的結果 – baao
乘法只涉及整數,所以它是作爲整數乘法完成的。只有一次完成後,結果纔會翻倍,但那時已經太晚了。轉換乘法中的一個值。 – Robert