정수 참조 동일성과 값 동일성
Java에서는 int와 같은 프리미티브와 Integer와 같은 객체 래퍼를 서로 바꿔 사용할 수 없습니다. 이 질문은 동일한 int 값을 가진 Integer 객체가 ==를 사용하여 잘못 비교되어 예상치 못한 실제 결과가 발생하는 문제를 제기합니다.
답은 JVM이 Integer 값을 캐싱하는 데 있습니다. 성능상의 이유로 JVM은 특정 범위(-128 ~ 127) 내에서 사전 할당된 객체를 재사용합니다. ==를 사용하여 Integer 객체를 비교할 때 JVM은 값 동일성이 아닌 참조 동일성을 확인합니다. 이 캐시된 범위 내의 값에 대해 참조 동일성은 값 동일성을 의미합니다.
그러나 제공된 코드 예제에서 정수 값은 이 캐시된 범위 밖에 있으므로 참조 동일성은 값 동일성을 보장하지 않습니다. 대신, 정수 값이 같은지 비교하려면 equals()를 사용해야 합니다.
질문 답변에 참조된 stackoverflow 링크는 오토박싱의 복잡성과 컴파일러가 항상 "작동하게 만들" 수 없는 이유에 대한 추가 통찰력을 제공합니다.
요약하자면, 기본 요소에 ==를 사용하는 것이 편리하지만 Integer와 같은 객체 래퍼를 다룰 때 참조 동등성의 한계를 이해하는 것이 중요합니다. 값 동등 비교를 위해서는 대신 equals()를 사용해야 합니다.
위 내용은 Java 정수 비교: `==`는 언제 작동하며 언제 `equals()`를 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!