개발/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 메서드를 사용하는 것이 좋겠다.