>Java >java지도 시간 >값이 동일한 경우에도 Java의 정수 비교가 때때로 False를 반환하는 이유는 무엇입니까?

값이 동일한 경우에도 Java의 정수 비교가 때때로 False를 반환하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-26 04:12:12502검색

Why Do Java's Integer Comparisons Sometimes Return False Even When Values Are Equal?

Java에서 수수께끼의 Integer Boxing 공개

문제의 Java 코드 조각은 흥미로운 질문을 제기합니다. 두 Integer 객체를 동등한 객체와 비교하는 이유는 무엇입니까? 값이 다른 결과를 낳는다고요?

큰 정수

127보다 큰 정수를 나타내는 두 개의 Integer 객체를 비교할 때 참조 비교를 통해 동등성을 결정하고 결과는 false입니다. 이는 메모리에서 별도의 개체이기 때문에 이러한 개체의 고유한 특성에서 비롯됩니다.

작은 정수 뒤에 숨은 진실

그러나 더 작은 정수를 다룰 때는 다른 행동이 나타납니다. Java 언어 사양에 따르면 -128에서 127 사이의 정수 값은 동일한 객체로 묶이는 것이 보장됩니다. 이러한 값을 나타내는 박스형 객체는 같음 연산자(==)를 사용하여 지속적으로 true로 비교됩니다.

구별의 근거

이 구별은 다음과 같은 실용적인 절충안입니다. 성능과 일관성 사이의 균형. 일반적으로 사용되는 값을 캐싱하면 효율적으로 재사용할 수 있으며 더 복잡한 값에 대한 개체 ID에 대한 가정을 방지할 수 있습니다. 대부분의 경우 성능을 저해하지 않고 원하는 동작을 보장합니다.

결론

정수 동등 비교의 겉보기에 역설적인 동작은 Java 박싱 메커니즘의 기본 구현에서 비롯됩니다. 큰 정수는 고유한 ID를 유지하지만 작은 정수는 캐시된 객체의 이점을 활용하여 일관된 동등성을 보장합니다.

위 내용은 값이 동일한 경우에도 Java의 정수 비교가 때때로 False를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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