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

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
Зарегистрируйся сейчас
или Подпишись на будущие тесты