Tenho o seguinte código:
package scjpclassesanonimas;
public class MyOuter {
private int x = 7;
void doStuff(){
final String i = "Variavel local de metodo";
class MyInner {
public void seeOuter() {
System.out.println ("Variavel class externa: " + x);
System.out.println ("Variavel metodo: " + i);
}
}
new MyInner().seeOuter();
}
public static void main (String[] args) {
MyOuter out = new MyOuter();
out.doStuff();
}
}
Para eu acessar a variável de método “i”, eu preciso marca-la como final, (pois a mesma está localizada na pilha, e pode durar menos tempo do que um objeto MyInner caso sua referência seja passada para uma variável fora deste escopo) pelo que eu saiba, o modificador final indica que o valor da variável não pode ser alterado. Pergunto: que diferença isto vai fazer neste contexto? A variável vai ficar “viva” até quando se estiver marcada com “final”?