우선 두 개의 (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))
우선 두 개의
두 개의(first == second)
에 대해 첫 번째는 int(기본 유형)이므로 == 비교를 수행할 때 두 번째는Integer
에서int
까지 unboxing된 다음 == 값 비교를 수행합니다. - 두 값(첫 번째 값은 127, 두 번째 값은 128)이 동일하므로 두 시간 모두true
입니다.을 보면 두 번째와 세 번째는 모두
은 IntegerCache.low ~ IntegerCache.high의(second == third)
(객체)이므로 ==를 비교할 때 비교되는 것은 두 참조가 동일한 메모리(the 동일한 객체)이면Integer
를 반환하고, 그렇지 않으면true
을 반환합니다.false
과 같은 코드는 실제로 Java의 구문 설탕입니다. 실제로 실행되는 것은
second = 127;
의 소스 코드를 살펴보겠습니다.second = Integer.valueOf(127)
Integer.valueOf
은 이해하기 쉽습니다.
을 내부적으로 캐시하므로, 내가 전달한 정수 매개변수가 이 범위 내에 있으면 캐시된 객체가 반환되고, 그렇지 않으면 그냥 생성되었습니다. 새로운
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()의 버퍼 개체 때문입니다.
으아악 으아악으아악
오브젝트 간의 비교는 특정 범위 내의 버퍼링으로 인해 결과에 영향을 미칩니다.
패키지 클래스(객체)와 기본 유형의 비교는 결과를 얻는 직접적인 비율입니다.