>  Q&A  >  본문

Java에서 동일한 데이터 유형인 System.out.println(i3==i4)을 사용하여 변수 i3, i4를 할당할 때 최종 출력이 동일하지 않은 이유는 무엇입니까?

System.out.println(i3==i4), 출력 결과가 true가 아닌 이유

으아악

黄舟黄舟2669일 전1052

모든 응답(2)나는 대답할 것이다

  • 迷茫

    迷茫2017-06-28 09:26:50

    우선, 우리는 객체 유형이 ==를 수행할 때 참조하는 메모리 주소를 비교한다는 것을 알고 있습니다. 따라서 원본 포스터의 데모에서는 원칙적으로 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
  • 黄舟

    黄舟2017-06-28 09:26:50

    플라스틱 래퍼 클래스는 0부터 150까지의 정수 개체를 캐시하므로 150보다 작으면 박싱 중에 캐시가 사용됩니다. 100은 캐시에 있는 개체이고 200은 새로 생성된 개체입니다

    회신하다
    0
  • 취소회신하다