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

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, так как при создании обоих, оба из кэша

Follow CodeGalaxy

Mobile Beta

Get it on Google Play
Send Feedback
Keep exploring
Java quizzes
Cosmo
Sign Up Now
or Subscribe for future quizzes