Boa noite, fiz um projeto para testar as implementações do método contains e equals, segue abaixo a classe main:
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import br.com.petlove.cachorros.Cachorro;
import br.com.petlove.donos.ProprietarioDoCachorro;
public class Teste {
public static void main(String[] args) {
Cachorro c1 = new Cachorro("Apolo", 2, 24.5);
Cachorro c2 = new Cachorro("Lulu", 3, 20.0);
Cachorro c3 = new Cachorro("Apolo", 10, 50.3);
Cachorro c4 = new Cachorro("Lessi", 12, 34.6);
ArrayList<Cachorro> listaCachorro = new ArrayList<Cachorro>();
listaCachorro.add(c1);
listaCachorro.add(c2);
listaCachorro.add(c3);
listaCachorro.add(c4);
listaCachorro.contains(c2);
Aqui a classe onde sobrescrevi equals:
package br.com.petlove.cachorros;
public class Cachorro extends Object {
private String nome;
private int idade;
private double peso;
public Cachorro(String nome, int idade, double peso) {
this.nome = nome;
this.idade = idade;
this.peso = peso;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
public double getPeso() {
return peso;
}
public void setPeso(double peso) {
this.peso = peso;
}
@Override
public boolean equals(Object ref) {
Cachorro comparacao = (Cachorro) ref;
if (this.nome == comparacao.getNome()) {
System.out.println("Tem um cachorro com esse nome");
return false;
}
System.out.println("Não tem nenhum cachorro com esse nome");
return false;
}
}
A minha dúvida é a seguinte, agora a implementação do equals faz certinho a verificação de nome dos cachorros, mas antes eu tinha feito uma outra implementação do metodo equals desta forma:
@Override
public boolean equals(Object ref) {
Cachorro comparacao = (Cachorro) ref;
if(this.nome != comparacao.getNome()) {
System.out.println("Não tem nenhum cachorro com esse nome");
return true;
}else {
System.out.println("Tem um cachorro com esse nome");
return false;
}
}
Como pode ser verificado o primeiro código retorna FALSE nas duas saídas do método equals, equanto esse segundo método além de ter um ELSE retorna TRUE no IF. Percebi também que se eu mudar o return da primeira implementação do equals para TRUE em qualquer uma dos returns ele só faz o laço 1 vez ou 2 vezes no máximo se eu colocar return TRUE no IF. Gostaria de uma explicação de alguém mais experiente do porque disso acontecer, fiquei bem confuso kkk.