Буквальний 127 позначає значення типу int. Так само і в прямому значенні 1. Сума цих двох становить ціле число 128. Проблема, у другому випадку, полягає в тому, що ви присвоюєте це змінній байту типу. Це не має нічого спільного з фактичним значенням виразів. Це стосується Java, що не підтримує примуси (*). Ви повинні додати набір тексту
byte b = (byte)(127 + 1);
а потім він компілює.
(*) принаймні не такого типу String-to-integer, float-to-Time, ... Java підтримує примушування, якщо вони, в певному сенсі, не втрачають (Java називає це "розширенням").
І ні, слово «примус» виправляти не потрібно було. Він був обраний дуже свідомо і правильно. З найближчого джерела (Вікіпедія): "У більшості мов слово примус використовується для позначення неявного перетворення або під час компіляції, або під час виконання". та "В інформатиці перетворення типів, передача типу та примус - це різні способи, неявно або явно, змінювати сутність одного типу даних на іншу".
byte
тип даних болить ?!