티스토리 뷰

얼마전 동료한테 디버깅 요청을 받았다. 어떤 값을 받아서 크기를 비교해서 예외를 처리하는 구문이었는데 테스트를 진행하면 예상과 반대의 결과가 나왔다.

 

나는 1초만에 감이 왔다. 오버플로우... 바로 Long 타입으로 바꿔보라고 말했고 바로 해결할 수 있었다. 

 

그러면 오버플로우가 발생하면 값이 어떻게 되었길래 예상과 다른 결과가 나왔을까? 분명 예전에 공부하면서 알았지만 기억나지 않아서 다시 테스트해본다.

 

 

Integer란?

  • 자바의 정수형 타입 중 하나이다.
  • 크기 -2147483648 ~ 2147483647

 

테스트1

int maxValue = 2147483647;
int minValue = -2147483648;
System.out.println(maxValue);
System.out.println(minValue);

//결과
2147483647
-2147483648

최대, 최소값을 출력했다.

 

 

테스트2

int maxValuePlusOne = 2147483648;
int minValueMinusOne = -2147483649;
System.out.println(maxValuePlusOne);
System.out.println(minValueMinusOne);

각각 최대, 최소값에 +1과 -1을 해주었더니 IDE에서 빨간줄이 그어져서 실행할 수 없었다.

 

 

테스트3

int maxValuePlusOne2 = Integer.MAX_VALUE;
System.out.println(maxValuePlusOne2 + 1);
System.out.println(maxValuePlusOne2 + 2);

int minValueMinusOne2 = Integer.MIN_VALUE;
System.out.println(minValueMinusOne2 - 1);
System.out.println(minValueMinusOne2 - 2);

//결과
-2147483648
-2147483647
2147483647
2147483646

최대, 최소값에 각각 +1, -1을 해준 결과 Integer 자료형은 무한 루프처럼 최대값 -> 최소값으로 최소값 -> 최대값으로 값이 변했다.

'Language > Java' 카테고리의 다른 글

우아한테크캠프 Pro 5기 프리코스 - JUnit, AssertJ 학습하기  (2) 2022.10.04
자바 자료구조  (0) 2022.07.04
JVM의 Garbage Collector  (0) 2021.04.09
Java Virtual Machine 구조  (0) 2021.04.09
10진수 <-> 2, 8, 16진수 변환  (0) 2021.02.28
댓글
Total
Today
Yesterday
링크
Apple 2023 맥북 프로 14 M3, 스페이스 그레이, M3 8코어, 10코어 GPU, 512GB, 8GB, 한글