Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Primeiros Passos - Comparando Objetos

No exercício 4, do treinamento Primeiros Passos/começando com Orientação a objetos, foi solicitado que fosse criado dois objetos e comparasse utilizando o comando abaixo :

if (f1 == f2) { System.out.println("iguais"); } else { System.out.println("diferentes"); }

No meu exemplo criei dois objetos com valores iguais, mas o resultado imprimiu "Diferentes" em vez de "iguais".

De Acordo com a explicação do instrutor sempre vai dar diferente, pois as variáveis só guardam as referências. Eu não entendi, pois os parâmetros foram inicializados com o mesmo valor.

Obrigado !!

Opinião do instrutor

Em ambos os casos, temos false como resposta. Isso é porque variáveis guardam apenas as referências! Por mais que dois objetos diferentes tenham as mesmas informações, cada um deles é um objeto à parte.

Você pode ver isso de uma forma simples: se você alterar o f1, note que o f2 não é alterado junto. Cada um é um objeto diferente e cada variável (f1 e f2) referencia um deles.

2 respostas
solução!

Oi André,

Em Java, tudo é "uma referência pra um objeto na memória". Ou seja, veja o código abaixo:

Pessoa mauricio1 = new Pessoa();
mauricio1.nome = "Mauricio";
mauricio1.idade = 28;

Pessoa mauricio2 = new Pessoa();
mauricio2.nome = "Mauricio";
mauricio2.idade = 28;

Nesse código, eu instanciei duas Pessoas, certo? Quando eu faço new, o Java está alocando espaço na memória, e guardando na variável mauricio1 o ENDEREÇO de memória que aponta pra ela.

A mesma coisa no mauricio2. Eu dei um new de novo, e esse objeto foi armazenado em OUTRA posição da memória.

Ou seja, apesar dos conteúdos serem iguais, quando eu comparo mauricio1 com mauricio2, eu estou comparando endereços de memória, que são diferentes!

Se eu quisesse comparar os conteúdos, eu precisaria fazer mauricio1.idade == mauricio2.idade.

Agora, se eu fizesse:

Pessoa m1 = new Pessoa();
Pessoa m2 = m1;

System.out.println(m1 == m2);

O resultado seria true, afinal m1 aponta para o mesmo lugar de m2!

Entendeu a diferença?

Maurício, obrigado pela explicação.