>Java >java지도 시간 >Java 정수 비교: 언제 ==와 Equals()를 사용해야 합니까?

Java 정수 비교: 언제 ==와 Equals()를 사용해야 합니까?

DDD
DDD원래의
2024-12-21 06:41:10297검색

Java Integer Comparison: When Should You Use == vs. equals()?

Java의 정수 평등: == 대 같음의 문제 풀기

버전 1.5에서 Java의 자동 박싱 도입으로 기본 요소의 편리한 교환이 가능해졌습니다. int와 같은 유형과 Integer와 같은 해당 래퍼 클래스입니다. 그러나 최근 관찰에 따르면 정수 값 비교에 == 사용의 타당성에 대한 의문이 제기되었습니다.

다음 코드를 고려하세요.

Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null & cdiCt != cdsCt)
    mismatch = true;

놀랍게도 이 코드는 때때로 불일치를 다음과 같이 설정합니다. cdiCt와 cdsCt의 값이 동일한 경우에도 true입니다. Eclipse에서 중단점을 사용하면 두 정수 값이 모두 137이라는 사실이 드러났지만 조건식은 false로 평가되었습니다.

대신 equals()를 사용하도록 조건식을 변경하여

if (cdiCt != null & cdiCt != null & !cdiCt.equals(cdsCt))

문제를 해결했습니다. 문제. 이로 인해 질문이 제기됩니다. 두 정수 값을 비교하는 데 ==를 사용하는 것이 여전히 권장되지 않습니까?

답은 정수 값의 JVM(Java Virtual Machine) 캐싱에 있습니다. 성능을 향상시키기 위해 JVM은 -128에서 127 사이의 정수 값을 캐시합니다. 이는 ==를 사용하여 이 범위 내의 두 정수 값을 비교할 때 동일한 캐시된 인스턴스를 참조하는 경우에만 동일하다는 것을 의미합니다.

그러나 값이 이 범위를 벗어나거나 오토박싱되지 않으면 별개의 개체로 처리됩니다. 제공된 예에서 볼 수 있듯이 이로 인해 예기치 않은 동작이 발생할 수 있습니다.

따라서 특히 캐시된 범위를 초과하거나 정밀도가 중요한 경우 정수 값을 비교할 때 ==에 의존하는 것은 일반적으로 권장되지 않습니다. . 대신, equals()를 사용하는 것이 안정적인 동등 비교를 보장하는 더 안전한 접근 방식입니다.

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

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