> Java > java지도 시간 > Java에서 '정수' 동일성이 때때로 'false'를 반환하는 이유는 무엇입니까?

Java에서 '정수' 동일성이 때때로 'false'를 반환하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-30 03:08:13
원래의
334명이 탐색했습니다.

Why Does `Integer` Equality Sometimes Return `false` in Java?

Java의 정수 캐싱: 최적화 이해

최근 관찰 결과 Java에서 Integer 개체의 동작과 관련하여 혼란이 야기되었습니다. 코드 예제에서는 항등 연산자가 1000과 같은 두 정수 인스턴스에 대해 "false"를 반환하지만 100과 같은 두 인스턴스에 대해 "true"를 반환한다는 것을 보여줍니다.

이 역설처럼 보이는 것은 Java의 정수 캐싱 메커니즘에서 비롯됩니다. 성능을 최적화하고 메모리 공간을 줄이기 위해 JVM(Java Virtual Machine)은 -128에서 127 사이의 값에 대해 Integer 객체를 캐시합니다. 즉, 이 범위 내의 Integer 인스턴스에 대한 참조는 항상 동일합니다.

따라서 Integer 인스턴스가 값 100을 나타내는 두 번째 코드 조각에서는 "c"와 "d"가 모두 동일한 캐시된 개체를 가리키므로 동일성을 비교할 때 "true"가 됩니다. 그러나 1000과 같이 이 범위를 벗어나는 값의 경우 다른 Integer 개체가 생성되므로 "거짓" 비교 결과가 발생합니다.

이 최적화는 메모리 사용량을 줄여 성능에 영향을 미치고 캐시 활용을 더욱 효율적으로 만듭니다. 또한 자주 사용되는 정수에 대해 새 객체를 생성하는 오버헤드를 제거하여 코드 실행 속도를 높입니다.

이 주제에 대한 추가 연구는 다음 리소스에서 찾을 수 있습니다.

  • [Oracle's Java 성능 튜닝 지침](https://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-tuning-6.html#integer_caching)
  • [Java 및 C에서 정수 연산 최적화 ](https://coincidental.com/research/number-boxes.pdf)

위 내용은 Java에서 '정수' 동일성이 때때로 'false'를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿