¿Por qué Java requiere una conversión explícita en una variable final si se copió de una matriz?
Comenzando con el siguiente código ...
byte foo = 1;
byte fooFoo = foo + foo;
Cuando intente compilar este código, obtendré el siguiente error ...
Error: (5, 27) Java: tipos incompatibles: posible conversión con pérdida de int a byte
... pero sifoo
es final ...
final byte foo = 1;
final byte fooFoo = foo + foo;
El archivo se compilará correctamente.
Pasando al siguiente código ...
final byte[] fooArray = new byte[1];
fooArray[0] = 1;
final byte foo = fooArray[0];
fooArray[0] = 127;
System.out.println("foo is: " + foo);
... imprimirá
foo is: 1
... lo cual está bien. El valor se copia a una variable final y ya no se puede cambiar. Jugar con el valor en la matriz no cambia el valor defoo
(como se esperaba...).
¿Por qué lo siguiente requiere un yeso?
final byte[] fooArray = new byte[1];
fooArray[0] = 1;
final byte foo = fooArray[0];
final byte fooFoo = foo + foo;
¿Cómo es esto diferente al segundo ejemplo en esta pregunta? ¿Por qué el compilador me da el siguiente error?
Error: (5, 27) Java: tipos incompatibles: posible conversión con pérdida de int a byte
¿Cómo puede pasar esto?