Olá, Marcus.
Tudo bem?
Você está correto. No exemplo que você mencionou, realmente há apenas um objeto, e tanto produto1
quanto produto2
são referências ao mesmo objeto na memória.
Vamos revisar o código para esclarecer:
public class Produto {
private String nome;
private double preco;
public Produto(String nome, double preco) {
this.nome = nome;
this.preco = preco;
}
public String getNome() {
return nome;
}
public double getPreco() {
return preco;
}
public void setPreco(double preco) {
this.preco = preco;
}
}
public class Teste {
public static void main(String[] args) {
Produto p1 = new Produto("Caneta", 1.50);
Produto p2 = p1; // p2 agora referencia o mesmo objeto que p1
p2.setPreco(2.00); // altera o preço do objeto referenciado por p1 e p2
System.out.println(p1.getPreco()); // imprime 2.00
}
}
No código acima, Produto p1 = new Produto("Caneta", 1.50);
cria um novo objeto Produto
e p1
referencia esse objeto. Quando você faz Produto p2 = p1;
, p2
passa a referenciar o mesmo objeto que p1
. Portanto, qualquer alteração feita através de p2
também será refletida em p1
, pois ambos referenciam o mesmo objeto.
Quando o método setPreco(2.00)
é chamado em p2
, ele altera o preço do objeto referenciado por p1
e p2
. Assim, ao chamar p1.getPreco()
, o valor retornado será 2.00
.
Espero ter ajudado e bons estudos!