Integer integer1 = 127 это сокращение для Integer integer1 = Integer.valueOf(127), и для значений от -128 до 127 (включительно) целые числа помещаются в кэш и возвращаются несколько раз, в то время как большие и меньшие числа каждый раз генерируют новые целые числа.
Ответ 2
== вернет true, если это точно такой же объект. Целые числа в "интерне" Java содержат числа в этом диапазоне, поэтому любая коробочная версия такого числа приведет к точно такому же объекту.
Чтобы избежать этого эффекта при сравнениях, используйте .equals()