문제:
다음 Java 코드를 고려하십시오.
Integer a = 1000, b = 1000; System.out.println(a == b); // false Integer c = 100, d = 100; System.out.println(c == d); // true
왜 a와 b의 비교는 false이고 c와 b의 비교는 false입니다. d는 두 쌍의 숫자 값이 모두 동일함에도 불구하고 true를 반환합니까?
답변:
메모리와 성능을 최적화하기 위해 JVM(Java Virtual Machine)은 내부에 Integer 인스턴스를 캐시합니다.
JVM은 작은 정수 값(일반적으로 -128에서 127 사이)이 자주 사용되는 것을 인식합니다. 프로그램. 이러한 각 값에 대해 새 Integer 개체를 할당하면 과도한 메모리가 소비됩니다. 따라서 JVM은 이 범위 내에서 사전 할당된 정수 인스턴스의 캐시를 유지 관리합니다. 오토박싱이 발생하거나 리터럴 정수 값이 정수 변수(예: 정수 c = 100;)에 할당되면 JVM은 캐시에서 해당 인스턴스를 검색합니다.
이러한 최적화는 메모리 오버헤드를 크게 줄이고 캐시 효율성을 향상시킵니다. . 동일한 Integer 객체에 대한 여러 참조를 저장함으로써 JVM은 중복 객체 생성을 방지하고 메모리 사용을 최적화할 수 있습니다.
위 내용은 Java의 정수 캐싱이 `==` 비교에 영향을 미치는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!