Сравните int и Object в Java - PullRequest
       3

Сравните int и Object в Java

2 голосов
/ 28 сентября 2010

У меня есть следующий код:

Object obj = 3;
//obj.equals(3); // so is this true?

obj равно 3?

Ответы [ 5 ]

9 голосов
/ 28 сентября 2010

То, что здесь играет, это автобокс.

Когда вы используете примитивный литерал, когда ожидается ссылка, примитив автоматически помещает в тип оболочки (в данном случае от int до Integer).

Ваш код эквивалентен этому:

Object obj = Integer.valueOf(3);
if ( obj.equals(Integer.valueOf(3)) ) {
    //...

Я оставлю вам решать, правда это или нет.

4 голосов
/ 28 сентября 2010

Это тоже интересно:

Object t = 3;

t.equals( 3 );  // true
3 == t;         // true 

Но

Object h = 128; 

h.equals( 128 ); // true 
128 == h;        // false

.equals будет работать, так как значение будет сравниваться. == Будет работать, используя ссылки, но только с -128 до 127, потому что механизм автобокса использует внутренний пул для хранения «наиболее часто используемых» ссылок.

Достаточно странно: o == 3 потерпит неудачу во время компиляции.

3 голосов
/ 28 сентября 2010

Да.

Вот что происходит за кулисами.

Object obj = Integer.valueOf(3);
obj.equals(Integer.valueOf(3));

Итак, конечно, они равны.

1 голос
/ 28 сентября 2010

Первый оператор установит для obj автоматически целочисленное значение (аналогично Integer.valueOf (3))

Следовательно, второе утверждение вернет true.

0 голосов
/ 06 мая 2014

Вам нужно выполнить приведение типов здесь, чтобы выполнить задачу


         Object obj = 3;
         if(obj.equals(Integer.valueOf(3)))
         {
        // to do something....  
         } 

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...