Что произойдет при попытке скомпилировать и запустить данный код?

public class IntTest {
    public static void main(String[] args) {
        Integer i1 = 1;
        Integer i2 = new Integer(1);
        Integer i3 = Integer.valueOf(1);
        System.out.println((i1 == i2) + " " + (i1 == i3) );
    }
}
Explanation
1. Integer i1 = 1; превращается компилятором в: Integer i1 = Integer.valueOf(1);
2. метод valueOf для значений от -128 до 127 достает объекты из кэша
3. Integer i2 = new Integer(1); тут создается новый объект сслыка на который присваивается переменной i2
4. Integer i3 = Integer.valueOf(1); согласно пункту 1 это и есть полная запись объявления Integer i3 = 1, а так как в этом случае объект берется из кэша, то ссылка i3 будет указывать на тот же самый объект, на который указывает ссылка i1.
Подведя итог получаем, что i1 == i2 -> false, так как первый брался из кэша, а второй новосозданный в куче, а i1 == i3 -> true, так как при создании обоих, оба из кэша

Слідкуй за CodeGalaxy

Мобільний додаток Beta

Get it on Google Play
Зворотній Зв’язок
Продовжуйте вивчати
тести з Java
Cosmo
Зареєструйся Зараз
або Підпишись на майбутні тести