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