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