É possível alterar o valor de uma variável declarada como efetivamente final dentro de um objeto?
sobes.tech IA
Resposta da IA
Em Java, o termo "effectively final" significa que a variável não foi alterada após a sua inicialização, embora não seja explicitamente declarada com a palavra-chave final. Isto é importante, por exemplo, para usar essas variáveis em expressões lambda ou classes anônimas.
Se uma variável for declarada como effectively final, não pode alterar o seu valor: tentar atribuir-lhe um novo valor causará um erro de compilação.
No entanto, se essa variável referencia um objeto, o estado do próprio objeto pode ser alterado, pois o que muda não é a referência, mas os campos internos do objeto. Por exemplo:
final List<String> list = new ArrayList<>();
list.add("novo item"); // Isto é permitido
// list = new ArrayList<>(); // Erro, não se pode alterar a referência
Assim, o valor da variável (a referência) não pode ser alterado, mas o conteúdo do objeto ao qual ela se refere pode ser modificado.