가능한 중복 : 래퍼 클래스에 대한 객체 항등 연산자은, 랩 된 값이 있는지 여부에 따라 다른 결과를 생성하는 경우로
Wrapper class and == operator자바 래퍼 클래스가 평등 객체 - 이상한 행동
보인다 바이트 범위 또는 아닙니다.
System.out.println("smaller than byte");
Integer i1 = 1;
Integer i2 = 1;
if (i1 == i2) System.out.println("same");
if (i1 != i2) System.out.println("not same");
System.out.println("larger than byte");
Integer i3 = 128;
Integer i4 = 128;
if (i3 == i4) System.out.println("same");
if (i3 != i4) System.out.println("not same");
다음과 같은 출력을 생성합니다 :
smaller than byte
same
larger than byte
not same
주 : 다음은이 동작을 보여하는 코드는 내가 리눅스에서 핫스팟에이 출력을 (1.6.0_24-B07를 구축) 얻었다. Long과 아마도 Short에 대해서도 같은 일이 발생합니다 (테스트하지는 않았습니다).
참고 : 리눅스에서 다른 HotSpot 빌드와 동일한 출력 누구든지 설명 할 수 있습니까?
작은 편집, 그냥 조금 더 흥미로 만들려면 :
는 말 인쇄 "same after all...
"에
if (i3 <= i4 && i3 >= i4) System.out.println("same after all...");
추가.
감사합니다. 저는 현재 SCJP를 배우고 있으며 공식 학습 가이드에서 이와 비슷한 예를 발견했습니다. 저자가이 동작에 대해주는 설명은 다릅니다 (분명히 잘못되었습니다). – maciek
@maciek : 정말요? 어떤 소스가 틀렸다고 생각하는지 또는 짧은 발췌 부분을 알려주시겠습니까? –
음, 충분히 신중하게 읽지는 않았습니다. 실제로 텍스트에서이 동작은 Short와 Integer에만 -128과 127 사이에 적용됩니다. 내 잘못 – maciek