2012-02-07 3 views
-4

가능한 중복은 :
Integer wrapper objects share the same instances only within the value 127?
Why is == true for some Integer objects?다음 Java 코드 출력의 이유는 무엇입니까?

class One 
{ 
    public static void main(String[] args) 
    { 
      Integer i1 = 10; 
      Integer i2 = 10; 

     if (i1 == i2) 
     { 
      System.out.println("In if "); 
     } 
     else 
     { 
      System.out.println("in else"); 
     } 
    } 
} 

상기 프로그램의 출력 In if 하지만 I1 및 I2의 값이 1000으로 변경이라면 출력된다 다른 곳에서.

나는 여기서 자동 폭행이 일어나고 있지만 출력의 이유를 이해할 수 없다는 것을 알고있다. 감사합니다!

+0

를 참조 \합니다. – warbio

+0

코드가 위험 할 수 있습니까? – Paul

답변

4

==은 두 피연산자가 동일한 인스턴스를 참조하는 경우에만 참을 반환합니다.

두 번째 경우에는 동일한 인스턴스가 아니므로 false를 반환합니다. (문자열을 ==과 비교할 수없는 것과 같은 이유)

첫 번째 경우 런타임은 실제로 작은 값의 Integer 개체를 캐시합니다. 따라서 i1i2은 동일한 캐시 된 개체를 가리 킵니다.

0

==가 (주소가 당신이 좋아하는 경우에,하지만 정말)

시도 obects을 비교한다

if (i1.equals(i2)) 
두 가지가 같은 객체인지
1

== 검사;

일반적으로 기본 유형을 래퍼 유형으로 묶으면 JVM이 메모리를 할당하고 새 객체를 만듭니다. 그러나 특별한 경우에 따라 JVM은 동일한 객체를 재사용합니다. 다음

불변 오브젝트로서 저장 프리미티브의리스트이다

  • 부울 값 TRUE와 FALSE

    모든 바이트 -128 127

  • 사이

  • 짧은 값 값

  • -128에서 127 사이의 int 값

  • 0 범위 \의 u0000의에서
  • 문자 내가 당신이 "여기에 입력 한 코드"모두를 제거하고 우리가 읽을 수있는 코드를 고정 많이하면 도움이 될 생각 u007F

http://today.java.net/pub/a/today/2005/03/24/autoboxing.html#immutable_objects

관련 문제