Atribuição de variável

5 respostas
crawler

Dado o seguinte trecho de código

public class TestArray {
	
	public static void main(String[] args) {
		TestArray t = new TestArray();
		t.start();
	}
	
	void start(){
		long [] a1 = {1,2,3};
		long [] a2 = adjust(a1);
		System.out.print(a2[0] + a2[1] + a2[2]);
		System.out.println(a1[0] + a1[1] + a1[2]);
	}
	
	long [] adjust(long [] a3){
		a3[2] = 4;
		return a3;
	}

}

Qual será o resultado? E quando rodei não entendi porque a saída foi 77, pois o array a1 é usado como argumento no método adjust e seu retorno deveria ser atribuido a a2 apenas, alguém pode me explicar?

5 Respostas

asousaj

a1 e a2 apontam para o mesmo objeto.

public class TestArray {
	
	public static void main(String[] args) {
		TestArray t = new TestArray();
		t.start();
	}
	
	void start(){
		long [] a1 = {1,2,3};
		long [] a2 = adjust(a1);//é passado para o metodo adjust a referencia ao objeto array de a1, o metodo altera o objeto e devolve o mesmo, sendo assim a1 e a2 apontam para o mesmo objeto que foi alterado para  {1,2,4}.  
		System.out.print(a2[0] + a2[1] + a2[2]);
		System.out.println(a1[0] + a1[1] + a1[2]);


		// para provar  
		if (a1 == a2)  
		    System.out.println("Iguais");  
		else  
		    System.out.println("Não iguais"); 
	}
	
	long [] adjust(long [] a3){
		a3[2] = 4;
		return a3;
	}

}
Gianetti

Vc não esta passando uma cópia do valor e sim referencia a um objeto.

asousaj

fui editar e duplicou
:S

JavaDreams

crawler

te indico duas coisas que me ajudaram muito quando comecei a estudar java

1 - ler o livro Java Use a Cabeça sobre a parte que fala de objetos e referências
se não me engano são alguns capítulos perto do Capítulo 5

2 - Treinar o Debug do eclipse ou NetB. pois ajuda muito a entender e corrigir erros simples.

Vai por mim, isso dá muito certo hehehe.

crawler

Valeu pessoal!!

Criado 16 de agosto de 2013
Ultima resposta 19 de ago. de 2013
Respostas 5
Participantes 4