자동차의 주행거리계가 999,999km에서 1km를 더 가면 000,000km가 되는 것과 같다.
011111111000000010000000은 -128로 해석자바 연산자는 오버플로우가 발생해도 에러(Exception)를 던지지 않는다. 그냥 잘못된(쓰레기) 값을 변수에 담고 다음 코드를 실행해 버린다.
byte value = 127;
value++;
System.out.println(value); // 결과: -128 (오버플로우 발생!)
만약 이게 은행 계좌 잔고나 게임 포인트였다면?
안전한 연산이 필요할 때는 일반 연산자 대신 이를 활용한다.
| 메소드 | 설명 |
|---|---|
Math.addExact(a, b) |
더하기 결과가 넘치면 ArithmeticException 발생 |
Math.subtractExact(a, b) |
빼기 결과가 넘치면 예외 발생 |
Math.multiplyExact(a, b) |
곱하기 결과가 넘치면 예외 발생 |
int x = 1000000;
int y = 1000000;
try {
int result = Math.multiplyExact(x, y); // 안전한 연산
} catch (ArithmeticException e) {
System.out.println("오버플로우 발생!");
}
정수와 달리 실수(float, double) 타입에서 오버플로우가 발생하면?
Infinity(무한대)가 된다.