> Java > java지도 시간 > Java의 정수 박싱이 '정수 == 정수' 비교에 대해 다른 결과를 생성하는 이유는 무엇입니까?

Java의 정수 박싱이 '정수 == 정수' 비교에 대해 다른 결과를 생성하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-24 08:39:14
원래의
711명이 탐색했습니다.

Why Does Java's Integer Boxing Produce Different Results for `Integer == Integer` Comparisons?

이상한 Java 정수 박싱

Java의 정수 박싱 메커니즘은 특히 참조 동등성을 비교할 때 약간 혼란스러울 수 있습니다.

문제

다음 코드 조각을 고려하세요.

실행하면 다음이 생성됩니다.

첫 번째 줄 a와 b가 다른 개체이므로 결과가 예상됩니다. 그런데 두 번째 줄의 결과는 무엇입니까?

답변

두 번째 줄의 실제 결과는 언어 사양에 의해 보장됩니다. 섹션 5.1.7에 따르면:

boxing할 값 p가 true, false, u0000~u007f 범위의 byte 또는 char이거나 -128~127 사이의 int 또는 short인 경우 모든 결과는 p, r1 및 r2의 두 복싱 변환은 항상 동일합니다.

두 번째 출력 줄은 보장되지만 첫 번째 줄은 보장되지 않습니다(아래 인용된 마지막 단락 참조).

이상적으로는 기본 값 p가 주어지면 Boxing은 항상 동일한 결과를 생성합니다. 참조. 실제로 이는 기존 구현 기술로는 불가능할 수도 있습니다. 위의 규칙은 실용적인 절충안입니다. 위의 마지막 절에서는 특정 공통 값을 항상 구별할 수 없는 개체로 묶어야 합니다. 구현에서는 느리게 또는 즉시 캐시할 수 있습니다.

다른 값의 경우 이 표현을 통해 프로그래머는 박스형 값의 동일성에 대해 어떤 가정도 할 수 없습니다. 이를 통해 이러한 참조의 일부 또는 전부를 공유할 수 있지만 강제하지는 않습니다.

이렇게 하면 대부분의 경우 특히 소형 장치에서 불필요한 성능 저하 없이 원하는 동작이 수행됩니다. 메모리 제약이 적은 구현에서는 -32K에서 32K 범위의 정수와 긴 문자뿐만 아니라 모든 문자와 짧은 문자를 캐시할 수 있습니다.

위 내용은 Java의 정수 박싱이 '정수 == 정수' 비교에 대해 다른 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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