No hay operador + para byte
. En cambio, los dos operandos son promovidos a int, por lo que tiene
byte = byte + byte
... becomes (widening to find + operator) ...
byte = int + int
... becomes (result of + operator) ...
byte = int
... que a su vez produce un error porque no hay conversión implícita de int
a byte
. Es necesario para emitir:
byte a = 1;
byte b = 2;
byte c = (byte) (a + b);
Éstos son los reglas reales de promoción numérica, desde section 5.6.2 of the JLS:
Cuando un operador aplica promoción numérica binaria a un par de operandos, cada uno de los cuales debe denotan un valor que es convertible a un tipo numérico, se aplican las siguientes reglas, en orden, usando conversión de ampliación (§5.1.2) para convertir operandos según sea necesario:
- Si cualquiera de los operandos es de un tipo de referencia, se realiza la conversión de unboxing (§5.1.8). Entonces:
- Si cualquiera de los dos operandos es de tipo doble, el otro se convierte a doble.
- De lo contrario, si cualquiera de los operandos es del tipo float, el otro se convierte en float.
- De lo contrario, si alguno de los operandos es de tipo largo, el otro se convierte en largo.
- De lo contrario, ambos operandos se convierten a tipo int.
Posible duplicado de [¿Por qué no puedo agregar dos bytes y obtener un int y puedo agregar dos bytes finales obtener un byte?] (http://stackoverflow.com/questions/13100019/why-can-noti-i-add-two-bytes-and-get-an-int-and-i-can- add-two-final-bytes-get-ab) –