El literal 127 denota un valor de tipo int. Lo mismo ocurre con el literal 1. La suma de estos dos es el entero 128. El problema, en el segundo caso, es que está asignando esto a una variable de tipo byte. No tiene nada que ver con el valor real de las expresiones. Tiene que ver con Java que no admite coacciones (*). Tienes que agregar un tipo de letra
byte b = (byte)(127 + 1);
y luego se compila.
(*) al menos no del tipo String-to-integer, float-to-Time, ... Java admite coacciones si, en cierto sentido, son sin pérdida (Java llama a esto "ensanchamiento").
Y no, la palabra "coerción" no necesitaba corrección. Fue elegido de manera muy deliberada y correcta. De la fuente más cercana a la mano (Wikipedia): "En la mayoría de los idiomas, la palabra coerción se usa para denotar una conversión implícita , ya sea durante la compilación o durante el tiempo de ejecución". y "En ciencias de la computación, la conversión de tipos, la conversión de tipos y la coerción son diferentes formas de, implícita o explícitamente, cambiar una entidad de un tipo de datos a otro".
byte
difícil el tipo de datos?