2013-07-08 6 views
1

차이점은 무엇입니까?자바 동등 연산자

public static void main(String[] args){ 
      Integer integer1=1000; 
      Integer integer2=1000; 
      System.out.println(integer1==integer2); 
     } 

결과 : 거짓

public static void main(String[] args){ 
     Integer integer1=100; 
     Integer integer2=100; 
     System.out.println(integer1==integer2); 
    } 

결과 : 사실

우리는 그것을 시도 할 수 있습니다!

답변

2

-128에서 127 사이의 모든 정수는 더 자주 사용되기 때문에 캐시됩니다.

public static void main(String[] args){ 
     Integer integer1=1000; 
     Integer integer2=1000; 
     System.out.println(integer1.equals(integer2)); 
    } 

를 또는, Integer 객체 인 등의 Integer 대신 int를 사용하면 작업의 첫 번째 예제를 원하는 경우에, 시도하십시오.

1

-128에서 127 사이의 정수는 java에 풀링됩니다.

오토 박싱의 결과 아래

2 다른 개체가 생성된다

Integer integer1=1000;integer1 and integer2 are referring to 2 different objects 
Integer integer2=1000; 

Integer integer1=100;both refer to the same because of pooling 
Integer integer2=100; 
+0

아니요, 'Integer i1 = 1000; 및 Integer i2 = 1000;은 다른 개체를 참조 할 수 없습니다. – jarnbjo

2

로서 JLS 5.1.7 당 :

박스형되는 값 p는, 바이트 상기의 숯 거짓 true이면 범위 \ u0000 ~ \ u007f 또는 int 또는 짧은 숫자가 -128 ~ 127 인 경우 r1과 r2를 p의 두 복싱 변환 결과라고 합니다. 항상 r1 == r2 인 경우입니다.

정수 127 -128 사이는 자바 풀링된다. 보기 this 소스 코드 :

1

참조 유형으로 Integer가 있습니다. ==은 객체와 함께 사용되는 경우에만 참조 인을 비교합니다. 인해 정수 불변성 및 인턴/풀링 작은 값

(최소한 범위 [-128, 127] 내의, 이러한 구현 다르며 이 의존하지 않아야하지만)으로 설정 될 수있다 동일한 객체를 참조하십시오.

첫 번째 예에서는 많은 수의 인턴이 기다리고 다른 참조를 사용하며 false로 평가합니다.

둘째 정수는 동일한 참조이며 비교가 true입니다.

0

Integer 대신 int를 사용하면 효과가 있습니다. 그렇지 않으면 == vs equals()에 대한 다른 답변을 참조하십시오.