Estava aqui estudando e me deparei com um problema que não consigo entender.
public class TesteObjetos {
protected int numero;
/**
*
*/
public TesteObjetos() {
numero = 1;
}
/**
* @param args
*/
public static void main(String[] args) {
TesteObjetos t1 = new TesteObjetos();
TesteObjetos t2 = new TesteObjetos();
t1.alteraValor(t1);
System.out.println(t1.numero); //saida é 2
t2.trocaReferencia(t2);
System.out.println(t2.numero); //saida é 1
}
public void trocaReferencia(TesteObjetos t) {
t = new TesteObjetos();
t.numero = 2;
}
public void alteraValor(TesteObjetos t) {
t.numero = 2;
}
}
dado o código acima, porque que quando eu dentro do método trocaReferencia troco a referência de t, ele ignora minhas alterações?
Sei que java sempre passa Objetos como referência, portanto, nao deveria referenciar o novo objeto?
Porém o que acontece é que ele simplesmente mantém o 1 objeto…
SUPONHO que isso seja porque o objeto foi criado dentro do método, então seu escopo é só dentro do método e ele se perde quando o metodo termina. é isso?
É mais ou menos a questão do escopo. Em Java todas as passagens de parâmetro são por valor, inclusive objetos, só que no caso de objetos o que é passado, é uma cópia do valor da referência do objeto.
Nas linhas 16 e 17 você cria dois objetos (A e B)
Na linha 18, está passando uma cópia da refência do objeto A para o método, e quando modifica o valor do atributo número, está trocando o valor do atributo no objeto A, ao qual t1 se referencia.