大家讲道理2017-04-18 10:46:11
우선 두 개의 (first == second)
에 대해 첫 번째는 int(기본 유형)이므로 == 비교를 수행할 때 두 번째는 Integer
에서 int
까지 unboxing된 다음 == 값 비교를 수행합니다. - 두 값(첫 번째 값은 127, 두 번째 값은 128)이 동일하므로 두 시간 모두 true
입니다.
을 보면 두 번째와 세 번째는 모두 (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))
怪我咯2017-04-18 10:46:11
두 개의 Ineger 유형을 ==로 비교합니다. 값이 -128~127 사이이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 이는 Integer.valueof()의 버퍼 개체 때문입니다.
으아악 으아악伊谢尔伦2017-04-18 10:46:11
으아악
오브젝트 간의 비교는 특정 범위 내의 버퍼링으로 인해 결과에 영향을 미칩니다.
패키지 클래스(객체)와 기본 유형의 비교는 결과를 얻는 직접적인 비율입니다.