2014-09-18 4 views

ответ

3

Integer класс сохраняет локальный кэш между -128 to 127 и возвращает тот же объект. Итак,

Integer a=200; --> Internally converted to Integer.valueOf(200); 
    Integer b=200; // not same as a 
    Integer c=20; 
    Integer d=20; // same as c 

    Integer c=new Integer(20); 
    Integer d=new Integer(20); 
    c==d --> returns false; because you are comparing references. 
+0

Это так. Не знаю о локальном кеше. кажется удивительным ответом – vikeng21

+0

@ vikeng21 - Да. Это так. проверьте [oracle doc] (http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#valueOf) – TheLostMind

1

Сравните объекты только с использованием равных значений, за исключением того, что вы действительно хотите удостовериться, что оба объекта одинаковы. В случае примитивов в штучной упаковке я считаю, что однажды увидел, что некоторые базовые номера кэшируются так, что в этих случаях Java вернет один и тот же объект. Я не могу проверить это прямо сейчас, но это объясняет поведение, с которым вы сталкиваетесь.

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