Литерал 127 обозначает значение типа int. Так же как и литерал 1. Сумма этих двух - целое число 128. Проблема, во втором случае, заключается в том, что вы присваиваете это переменной типа byte. Это не имеет ничего общего с действительным значением выражений. Это связано с тем, что Java не поддерживает принуждения (*). Вы должны добавить Typecast
byte b = (byte)(127 + 1);
и затем компилируется.
(*) по крайней мере не типа String-to-integer, float-to-Time, ... Java поддерживает принуждения, если они, в некотором смысле, не являются потерями (Java называет это "расширением") .
И нет, слово «принуждение» не нуждается в исправлении. При этом он был выбран очень осознанно и правильно. Из ближайшего источника (Википедия): «В большинстве языков слово принуждение используется для обозначения неявного преобразования, либо во время компиляции, либо во время выполнения». и «В информатике преобразование типов, приведение типов и принуждение являются различными способами явного или неявного изменения сущности одного типа данных в другой».