Por que o comportamento do pool constante Integer é alterado em 127?

Eu não sou capaz de entender como funciona o Java Constant Pool for Integer.

Eu entendo o comportamento das cordas e, portanto, capaz de justificar-me que é o mesmo caso com Constantes Integrais também.

Então, para inteiros

Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1==i2); // True

&

Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1==i2); // False

Até aqui tudo vai na minha cabeça.

O que eu não sou capaz de digerir é, ele se comporta de maneira diferente quando eu aumento o inteiro de 127. Esse comportamento muda depois de 127, abaixo está o trecho de código

Integer i1 = 128;
Integer i2 = 128;
System.out.println(i1==i2); // False. WHY?????

Alguém pode me ajudar a entender isso?

questionAnswers(4)

yourAnswerToTheQuestion