Por que o Java requer uma conversão explícita em uma variável final se ela foi copiada de uma matriz?
Começando com o seguinte código ...
byte foo = 1;
byte fooFoo = foo + foo;
Quando tento compilar esse código, recebo o seguinte erro ...
Erro: (5, 27) java: tipos incompatíveis: possível conversão com perdas de int para byte
... mas sefoo
é final ...
final byte foo = 1;
final byte fooFoo = foo + foo;
o arquivo será compilado com sucesso.
Passando para o seguinte 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
... o que é bom. O valor é copiado para uma variável final e não pode mais ser alterado. Tocar com o valor na matriz não altera o valor dofoo
(como esperado...).
Por que o seguinte requer um elenco?
final byte[] fooArray = new byte[1];
fooArray[0] = 1;
final byte foo = fooArray[0];
final byte fooFoo = foo + foo;
Como isso é diferente do segundo exemplo nesta pergunta? Por que o compilador está me fornecendo o seguinte erro?
Erro: (5, 27) java: tipos incompatíveis: possível conversão com perdas de int para byte
Como isso pode acontecer?