2013-08-29 2 views
-1
public class Test { 
    public static void main(String[] args) { 
     Integer i=555,j=555; 
     System.out.println(i==j); //false 
     Integer l=5,n=5; 
     System.out.println(l==n); //true 
    } 
} 

Почему, Java? Как это вообще возможно?Что случилось с Integer, Java?

+1

http://stackoverflow.com/questions/8427416/why-is-true-for-some-integer-objects?rq=1 - Дубликат, за исключением наоборот. – Mat

+1

По той же причине, почему вы почти никогда не сравниваете строки с '=='. –

+1

@ DennisMeng Существует больше, чем это. – arshajii

ответ

2

Вы сравнив упоминание двух различных Integer экземпляров класса с тем же значением, так что вы должны использовать метод equals (как это должно быть, чтобы сравнить равенства между объектами):

Integer i=555,j=555; 
System.out.println(i==j); //false 
Integer i=555,j=555; 
System.out.println(i.equals(j)); //true 

Integer Но есть пул Integer экземпляров объекта для int значений между -128 и 127. Таким образом, когда вы делаете

Integer l=5,n=5; 
System.out.println(l==n); //true 

вы получаете true поскольку l и nуказывает на ту же ссылку на объект.

Смежные вопросы