우선, 우리는 객체 유형이 ==를 수행할 때 참조하는 메모리 주소를 비교한다는 것을 알고 있습니다. 따라서 원본 포스터의 데모에서는 원칙적으로 i1==i2 및 i3==i4가 참조하는 메모리 주소를 비교하는데 둘 다 거짓이어야 합니다. 그러나 Java는 Java5에서 Integer 캐싱 메커니즘을 도입했습니다. 개발자가 Integer 유형을 사용할 때 정의된 값이 -128~127 사이이면 참조는 생성된 캐시 객체를 직접 가리킵니다.
포스터의 데모에서는 두 변수 i1과 i2가 -128~127 사이에 있으므로 두 변수의 참조는 동일한 객체 인스턴스(동일한 메모리 주소)를 가리키므로 true가 반환되고, 두 변수 i3과 i4 값이 -128~127 사이가 아니므로 jvm은 자동으로 boxing된 두 개체 유형에 대해 새 개체 인스턴스(다른 메모리 주소)를 생성하므로 false를 반환합니다.
정수 캐시 메커니즘의 최대값은 jvm 매개변수 -XX:AutoBoxCacheMax=size를 통해 조정할 수 있습니다. Integer의 자세한 내용과 원리는 이 블로그를 참고해주세요. http://blog.csdn.net/u0110040...
우선, 우리는 객체 유형이 ==를 수행할 때 참조하는 메모리 주소를 비교한다는 것을 알고 있습니다. 따라서 원본 포스터의 데모에서는 원칙적으로 i1==i2 및 i3==i4가 참조하는 메모리 주소를 비교하는데 둘 다 거짓이어야 합니다. 그러나 Java는 Java5에서 Integer 캐싱 메커니즘을 도입했습니다. 개발자가 Integer 유형을 사용할 때 정의된 값이 -128~127 사이이면 참조는 생성된 캐시 객체를 직접 가리킵니다.
포스터의 데모에서는 두 변수 i1과 i2가 -128~127 사이에 있으므로 두 변수의 참조는 동일한 객체 인스턴스(동일한 메모리 주소)를 가리키므로 true가 반환되고, 두 변수 i3과 i4 값이 -128~127 사이가 아니므로 jvm은 자동으로 boxing된 두 개체 유형에 대해 새 개체 인스턴스(다른 메모리 주소)를 생성하므로 false를 반환합니다.
정수 캐시 메커니즘의 최대값은 jvm 매개변수 -XX:AutoBoxCacheMax=size를 통해 조정할 수 있습니다. Integer의 자세한 내용과 원리는 이 블로그를 참고해주세요. http://blog.csdn.net/u0110040...
플라스틱 래퍼 클래스는 0부터 150까지의 정수 개체를 캐시하므로 150보다 작으면 박싱 중에 캐시가 사용됩니다. 100은 캐시에 있는 개체이고 200은 새로 생성된 개체입니다