关于java的自动装箱(autoboxing)和拆箱(unboxing)
PHP中文网
PHP中文网 2017-04-18 10:44:11
0
3
697
PHP中文网
PHP中文网

认证0级讲师

모든 응답(3)
大家讲道理

우선 두 개의 (first == second)에 대해 첫 번째는 int(기본 유형)이므로 == 비교를 수행할 때 두 번째는 Integer에서 int까지 unboxing된 다음 == 값 비교를 수행합니다. - 두 값(첫 번째 값은 127, 두 번째 값은 128)이 동일하므로 두 시간 모두 true입니다.

두 개의

을 보면 두 번째와 세 번째는 모두 (second == third)(객체)이므로 ==를 비교할 때 비교되는 것은 두 참조가 동일한 메모리(the 동일한 객체)이면 Integer를 반환하고, 그렇지 않으면 true을 반환합니다. false
과 같은 코드는 실제로 Java의 구문 설탕입니다. 실제로 실행되는 것은 second = 127;의 소스 코드를 살펴보겠습니다. second = Integer.valueOf(127)Integer.valueOf
은 이해하기 쉽습니다.

은 IntegerCache.low ~ IntegerCache.high의

을 내부적으로 캐시하므로, 내가 전달한 정수 매개변수가 이 범위 내에 있으면 캐시된 객체가 반환되고, 그렇지 않으면 그냥 생성되었습니다. 새로운 Integer. Oracle JVM에서 Integer의 기본 캐시 범위는 -128 ~ 127입니다. 따라서 Integer을 호출할 때마다 동일한 캐시된 Integer이 반환되고, Integer.value(127)을 호출하면 매번 새로운 Integer이 생성됩니다. 따라서 첫 번째 Integer.value(128)는 true를 반환하고 두 번째는 false를 반환합니다. Integer(new Integer(128))

刘奇

두 개의 Ineger 유형을 ==로 비교합니다. 값이 -128~127 사이이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 이는 Integer.valueof()의 버퍼 개체 때문입니다.

으아악 으아악
伊谢尔伦

으아악

  • 오브젝트 간의 비교는 특정 범위 내의 버퍼링으로 인해 결과에 영향을 미칩니다.

  • 패키지 클래스(객체)와 기본 유형의 비교는 결과를 얻는 직접적인 비율입니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿