- 締切済み
equalsメソッドの実装
いくつかの本をインスタンスで生成します。この本を4つ生成するときに、3つ目に用意したインスタンスと4つ目に用意したインスタンスの中身が等しい=trueという処理をおこないたいのですが、調べてみた結果、自分でequalsを実装しなくてはならないらしく、その実装ができずにこまっています。equalsメソッドがどんな形になるか、教えていただけないでしょうか? class Book{ String name;//書名 String author;//著者 String publisher;//出版 /*コンストラクタ*/ Book( String name, String author, String publisher, int number){ this.name = name;//書名 this.author = author;//著者 this.publisher = publisher;//出版社 } } class BookShelf{ public static void main(String[] args){ /*インスタンスを作成*/ Book aBook_A = new Book("書名1","Aさん","A出版"); Book aBook_B = new Book("書名2","Bさん","B出版"); Book aBook_C = new Book("書名3","Cさん","C出版"); Book aBook_D = new Book("書名3","Cさん","C出版"); System.out.println(aBook_C.equals(aBook_d));//falseが返される。 } }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- _ranco_
- ベストアンサー率58% (126/214)
本格的なアプリケーションのための本格的なクラスなら、equals()メソッドはjava.lang.Objectクラスの: public boolean equals(Object obj) を正しくオーバライドすべきです。それを怠ると、今後このクラスのオブジェクトをCollectionの中で使ったときなどに、期待した結果が得られなくなります。 またequals()メソッドは、objがこのクラスのオブジェクトでない場合と、objがnullの場合を扱っておくのが安全です。
- auty
- ベストアンサー率58% (284/486)
1例として、以下のコードを参考にしてみてください。 ------------------------------------------------------------ public class Book { String name;// 書名 String author;// 著者 String publisher;// 出版 int id; /* コンストラクタ */ Book(String name, String author, String publisher, int number) { this.name = name;// 書名 this.author = author;// 著者 this.publisher = publisher;// 出版社 this.id = number; } public boolean equals(Book obj) { if (name.equals(obj.name) && author.equals(obj.author) && publisher.equals(obj.publisher) ) { return true; } return false; } } ------------------------------------------------------------ public class BookShelf { public static void main(String[] args) { /* インスタンスを作成 */ Book aBook_A = new Book("書名1", "Aさん", "A出版", 0); Book aBook_B = new Book("書名2", "Bさん", "B出版", 1); Book aBook_C = new Book("書名3", "Cさん", "C出版", 2); Book aBook_D = new Book("書名3", "Cさん", "C出版", 3); System.out.println(aBook_C.equals(aBook_D)); } }