Pois eh mateusbrum… procurei a resposta no meu livro de certificação da AltaBooks e eles só falam que pode, mas não falam o porquê.
Eu só sei o seguinte. Classes internas de método, apesar de tudo, guardam seus objetos no heap pois pode ter alguma referencia pro objeto que esteja fora do método. Logo não poderia utilizar variáveis locais que sumirão junto com a pilha.
Então, apesar de não ter achado nada a respeito, só vejo duas hipóteses:
1 - variáveis locais “final” não ficam na pilha e ficam no heap ou em algum outro lugar distante da JVM que eu desconheço… rsrsrs (acho pouco provável).
2 - na hora da compilação, o compilador substitui chamadas para variaveis locais final por seus valores literais com o intuito de aumentar a performance (já li algo do tipo, ele faz várias coisas similares pra melhorar a performance)… acho que deve ser isso.
Ou seja, se declarou “final int x = 5” e usou no método “valor = x”, o compilador deve substituir por “valor = 5”, e a chamada é removida.
Porém, se descobrir ao certo em alguma especificação da sun posta ae !!
Abraço