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 중국어 웹사이트의 기타 관련 기사를 참조하세요!