>Java >java지도 시간 >Java의 상수 풀에서 -128 ~ 127 범위 밖의 정수 값이 다르게 동작하는 이유는 무엇입니까?

Java의 상수 풀에서 -128 ~ 127 범위 밖의 정수 값이 다르게 동작하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-07 04:16:03475검색

Why Do Integer Values Outside the Range -128 to 127 Behave Differently in Java's Constant Pool?

127 이후 정수 상수 풀의 동작이 다른 이유

Java의 숫자 상수 풀은 문자열의 상수 풀과 다릅니다. 문자열에는 컴파일 타임 상수만 인터닝되지만 모든 박싱 작업에는 래퍼 유형의 정수 풀이 포함됩니다.

예:

int x = 10;
int y = x + 1;
Integer z = y; // Not a compile-time constant
Integer constant = 11;
System.out.println(z == constant); // true

JLS는 작은 범위의 풀링된 값을 보장합니다. , 구현에는 더 큰 범위를 사용할 수 있는 옵션이 있습니다.

실제로 대부분의 구현에서는 박싱에 Integer.valueOf를 사용합니다.

Integer x = Integer.valueOf(100);
Integer y = Integer.valueOf(100);
System.out.println(x == y); // true

JLS 섹션 5.1.7에 따르면:

-128에서 127 사이의 값은 boxing 시 항상 동일한 참조를 생성합니다. 이는 공통 값을 항상 구별할 수 없도록 보장하는 실용적인 절충안입니다.

그러나 이 범위를 벗어나는 값에 대해서는 동작이 변경됩니다. 효율성상의 이유로 구현 시 이러한 값에 대한 공유 참조를 가정하지 않을 수 있습니다.

이는 성능에 큰 영향을 주지 않고 대부분의 상황에서 원하는 동작을 보장합니다. 메모리가 제한된 구현을 통해 캐싱을 확장하여 더 넓은 범위의 값을 처리할 수 있습니다.

위 내용은 Java의 상수 풀에서 -128 ~ 127 범위 밖의 정수 값이 다르게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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