kyucumber
전체 글 보기

Java의 Long 타입과 비교 연산

코드리뷰 중 아래와 같이 Long 타입의 비교 연산을 == 를 이용해 수행하는 부분을 발견했습니다.

Long 타입의 경우 원시 값이 아니라 equals를 사용해야 정상적으로 동작할 것이라고 생각했는데 예상과 다르게 동작하는 부분을 확인해 관련 내용을 정리합니다.

Long id = 1L Long anotherId = 1L if (id == anotherId) // true?

자바에서는 -128에서 127까지의 범위의 경우 상수 풀을 유지합니다. 따라서 ==을 통해 비교하더라도 정상적으로 동작할 수 있습니다. 다만 더 큰 값으로 올라가는 경우 정상적으로 동작하지 않을 수 있기에 아래와 같이 equals를 사용해 비교해야 합니다.

Long id = 1L Long anotherId = 1L if (id.equals(anotherId)) // equals를 이용해 compare

Reference

https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.7

Table of contents