Comportamente Estranho

3 respostas
leonardootto

Alguem que entenda de bytecode pode de dizer pq isso acontesse?
Isso esta mesmo correto.
Se eu remover a linha do “created=0” funciona corretamente.

public class M {
	private int created = 0;
	
	public M(){
		int created = 0;
		for (int i = 0; i < 2; i++) {
			System.out.println(++created);
			inDeep();
		}
	}

	private void inDeep() {
		System.out.println(created);
		
	}
	public static void main(String[] args) {
		M c = new M();
	}
	
}

Saida

1
0
2
0

3 Respostas

EugenioMonteiro

No método M, vc está criando uma nova variável created que não é a mesma que é atributo da classe. Desse modo, elas apenas tem o mesmo nome, mas não são a mesma coisa. O método inDeep() não “conhece” o created do método M, ele só conhece o created atributo da classe.

juliofsn

Complementando, se uma variável local e outra de instância têm o mesmo nome, a preferência é pela local (a de instância só seria acessível através do “this.”)

leonardootto

:oops:

Criado 15 de setembro de 2009
Ultima resposta 15 de set. de 2009
Respostas 3
Participantes 3