Porque em Java, a passagem de parâmetros é por valor, e o método metodoA(int a) altera a cópia local da variável.
[]'s
elvishr
sim, mas qual variavel a q é incrementada??
Entendi que a variavel a da classe foi incrementada e recebeu o valor 1.
Mas a variavel a do metodo main é local, por isso exibiu zero.
É isso mesmo??
A
ana_abrantes
Ao contrário…
A variável “a” dentro do método metodoA() é incrementada, mas assim que este método termina ela é “eliminada”.
E a variável “a” static da classe (e não local do método main()!) continua com o mesmo valor que começou, por isso imprime 0.
O que acontece dentro do método metodoA() é chamado de shadowing ou sombreamento(tradução horrível! acho que fica melhor ocultar), ou seja, a variável local tem o mesmo nome de uma de instância ou classe, mas a local é a que é enxergada pelo método.
Para alterar a variável static bastaria mudar:
colocando o nome da classe: Teste.a++
trocar o nome do argumento (variável local) por um diferente de a
se tivesse uma instância da classe(dentro de metodoA):
Teste t = new Teste();
t.a++;
Certo?
elvishr
Ahhh… entendi, dentro do método metodoA(), a variavel incrementada é do parametro e nao a da classe, logo ela é eliminada …
A variavel a do metodo main e do metodoA nao tem nada a ver com a variavel static a da classe Teste, so o nome q é o mesmo …
Estou certo?
A
ana_abrantes
“elvishr”:
Ahhh… entendi, dentro do método metodoA(), a variavel incrementada é do parametro e nao a da classe, logo ela é eliminada …
Correto.
“elvishr”:
A variavel a do metodo main e do metodoA nao tem nada a ver com a variavel static a da classe Teste, so o nome q é o mesmo …
Estou certo?
Errado.
Só tem 2 variáveis com nome a.
A variável dentro do método main() É a variável static da classe!
E não tem nada a ver com a do metodoA().