Sobes.tech
Junior — Middle

É 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.