개발/Java
[JAVA] Integer 에서 == 연산자 대신 'equals' 메서드 비교해야 하는 이유
Hide
2025. 1. 19. 00:34
Integer로 선언한 변수에서 == 비교 시 무조건 false로 반환되는 이슈가 있었다.
찾아보니 생성자를 통한 Integer 객체 생성 시 -128 ~ 127 사이의 값은 == 연산자로 비교되지 않는다고 한다.
'==' 연산자 : 객체의 주소 값을 비교
'equals' 메서드 : 객체의 값(데이터) 를 비교
Wrapper 타입인 Integer 객체에 '==' 연산자 사용 시 false값이 반환되는 경우가 있다.
원인은 Integer Cache라는 데에 있다.
-127부터 127 사이의 값들은 Integer 객체에서 내부적으로 Cache되고, 해당 참조 객체를 통해 재사용되므로 주소값 비교 시에도 true로 사용 가능하지만, 생성자를 통한 선언에서는 cache 되지 않으며, 해당 사이 값을 사용하더라도 == 값으로 비교되지 않는다.
Integer 비교 시 equals 메서드를 사용하는 것이 좋겠다.