Olá pessoal, to com o seguinte problema. criei uma classe que tem um metodo equals que e pra fazer duas verificações entre duas classes, so que a verificação não esta funcionando, por que sempre ta retornando como se os dois livros fossem iguais, mesmo sem serem. esses são os meus codigos:
importbr.ifrn.edu.poo.classes.Livro;importjava.util.Scanner;publicclassBiblioteca{publicstaticvoidmain(String[]args){Scannerleia=newScanner(System.in);Livrolivro1=newLivro();Livrolivro2=newLivro();System.out.println("Livro 1: ");System.out.print("Titulo: ");livro1.setTitulo(leia.nextLine());System.out.print("ISBN: ");livro1.setTitulo(leia.nextLine());System.out.println("Livro 2: ");System.out.print("Titulo: ");livro2.setTitulo(leia.nextLine());System.out.print("ISBN: ");livro2.setTitulo(leia.nextLine());if(livro1.equals(livro2)==true)System.out.println("Os dois livros são iguais!");elseSystem.out.println("Os dois livros são diferentes!");}}
O codigo está sempre retornando "Os dois livros são iguais!"
Primeiro vou explicar o erro na sua classe Livro. Você no seu método equals estava comparando o titulo do mesmo objeto, por isso que sempre ele retornava o livro igual, pois a referencia dos objetos sempre apontava para o mesmo endereço de memoria (Por causa do ==, vou chegar lá). Para funcionar você deve implementar os métodos GET na sua classe livro e no método equals você deve perguntar se o titulo é igual ao getTitulo do objeto livro que você passa como parametro. Com isso a comparação não pode ser feita com ==, pois o == irá comparar o endereço de memoria que nesse caso sempre sera diferente pois você irá trablhar com 2 objetos livros distintos. Para comparação ser realizada com sucesso você deve usar o proprio método equals.
Existem algumas condições que devem ser satisfeitas para o equals:
1. O equals deve sempre retornar false se o outro objeto for nulo;
2. O equals deve sempre retornar false para um objeto de uma classe diferente (o teste não deve ser feito com instanceof);
3. O equals deve sempre retornar true se o objeto estiver sendo comparado com ele mesmo;
4. Sempre que o equals for sobrescrito, você deve sobrescrever o hashcode;