다음 시나리오에서 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로 변경하면 (주석에서 언급 한 것처럼) 결과가 정확합니다. 멀티 플라이어 중 하나의 유형이 double로 변경 될 때 Java가 다르게 동작하는 이유는 무엇입니까?
계산은 정수로 이루어지며 결과는 계산 후 double으로 변환됩니다. 따라서 귀하의 int가 결과를 산출 할 MAX_VALUE의 두 배가되는 순간이 있습니다. – baao
곱셈은 정수 만 포함하므로 정수 곱셈을 수행합니다. 한 번만 수행하면 결과가 double로 변환되지만 그 시점에서 이미 너무 늦었습니다. 곱셈에서 값 중 하나를 전송하십시오. – Robert