이번에는 친구가 말해줘서 알게 된 내용입니다.

 

 

 

보시면, 두 값이 128로 같은데 테스트가 실패하는 것을 알 수 있습니다.

 

 

반면 127로 했을 경우 성공합니다.

 

실제로 Integer값이 들어갈 때, 이 valueOf를 이용합니다

 

high 값은 이렇게 설정되어 있습니다. java를 실행할 때 아무 옵션을 주지 않았다면, 127로 되어 있습니다.

 

그래서 -128부터 127까지는 캐시에 있는 값을 들고 오고, 아닌 경우에는 새로운 객체를 만듭니다.

즉, -128 부터 127까지는 같은 객체를 재활용하며, 이 이상 범위는 새로운 Integer 객체를 만들어서 반환합니다.

 

그렇기 때문에, 

 

이런 식으로 테스트를 하게 되면 객체의 주소값을 비교해서 이러한 현상이 나오게 됩니다.

 

 

그래서 객체를 비교할 때는 equals()를 써야 합니다.

 

이런 내용은 처음 알았네요.

 

 

참고 자료 : https://stackoverflow.com/questions/1700081/why-is-128-128-false-but-127-127-is-true-when-comparing-integer-wrappers-in-ja

반응형

+ Recent posts