>Java >java지도 시간 >Java 정수 비교: `==`는 언제 작동하며 언제 `equals()`를 사용해야 합니까?

Java 정수 비교: `==`는 언제 작동하며 언제 `equals()`를 사용해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-25 22:49:16902검색

Java Integer Comparison: When Does `==` Work, and When Should You Use `equals()`?

정수 참조 동일성과 값 동일성

Java에서는 int와 같은 프리미티브와 Integer와 같은 객체 래퍼를 서로 바꿔 사용할 수 없습니다. 이 질문은 동일한 int 값을 가진 Integer 객체가 ==를 사용하여 잘못 비교되어 예상치 못한 실제 결과가 발생하는 문제를 제기합니다.

답은 JVM이 Integer 값을 캐싱하는 데 있습니다. 성능상의 이유로 JVM은 특정 범위(-128 ~ 127) 내에서 사전 할당된 객체를 재사용합니다. ==를 사용하여 Integer 객체를 비교할 때 JVM은 값 동일성이 아닌 참조 동일성을 확인합니다. 이 캐시된 범위 내의 값에 대해 참조 동일성은 값 동일성을 의미합니다.

그러나 제공된 코드 예제에서 정수 값은 이 캐시된 범위 밖에 있으므로 참조 동일성은 값 동일성을 보장하지 않습니다. 대신, 정수 값이 같은지 비교하려면 equals()를 사용해야 합니다.

질문 답변에 참조된 stackoverflow 링크는 오토박싱의 복잡성과 컴파일러가 항상 "작동하게 만들" 수 없는 이유에 대한 추가 통찰력을 제공합니다.

요약하자면, 기본 요소에 ==를 사용하는 것이 편리하지만 Integer와 같은 객체 래퍼를 다룰 때 참조 동등성의 한계를 이해하는 것이 중요합니다. 값 동등 비교를 위해서는 대신 equals()를 사용해야 합니다.

위 내용은 Java 정수 비교: `==`는 언제 작동하며 언제 `equals()`를 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.