코드리뷰 중 아래와 같이 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