Следующего кода компилирует (с Java 8):При использовании == для примитивного и коробочного значения, это Autoboxing сделан, или распаковка сделан
Integer i1 = 1000;
int i2 = 1000;
boolean compared = (i1 == i2);
Но что он делает?
Unbox i1
:
boolean compared = (i1.intvalue() == i2);
или коробка i2
:
boolean compared = (i1 == new Integer(i2));
Так ли это сравнение двух Integer
объектов (ссылки) или два int
переменные значения?
Обратите внимание, что для некоторых чисел сравнительное сравнение даст правильный результат, потому что класс Integer поддерживает внутренний кеш значений от -128
до 127
(см. Также комментарий TheLostMind). Вот почему я использовал 1000
в своем примере и почему я специально задаю вопрос о распаковке/боксе, а не о результате сравнения.
Конечно, если вы запускали этот код и напечатал вывод, который вы могли бы определить это самостоятельно. – Scruffy
Вопрос не совсем такой же, как тот, который использовался для обозначения его как дубликата :) – TheLostMind
Установите этот флажок [вопрос - правила автоматического бокса] (http://stackoverflow.com/questions/12559634/java-autoboxing-rules). В его ответе, очевидно, этот случай был рассмотрен. –