Java 个对象中的 .equals() 方法

.equals() method in Java objects

我在理解这段代码时遇到了一些困难。我知道我需要创建一个方法来比较非内置函数,但是有人可以向我详细解释布尔值 equals() 实际在做什么吗?

public class Book {

     private String title;
     private Author author;
     private int year;
     public boolean equals(Object o) {
         if (o == this) { return true; }
         if (o == null) { return false;}
         if (!o.getClass().equals(Book.class)) {return false; }
         Book aBook = (Book) o;
         return aBook.year == year && aBook.title.equals(title) && aBook.author.equals(author);
     }
}

朋友给我的,如果有什么改进的建议请告诉我。

检查我在你的代码中的评论:-

public boolean equals(Object o) {
         //below line is comparing if o refers to the same current object
         if (o == this) { return true; }
         //below line is checking if o is null, in that case it will return false
         if (o == null) { return false;}
         //checking if the class of o is Book, if not return false
         if (!o.getClass().equals(Book.class)) {return false; }
         //Casting the o from Object to Book class
         Book aBook = (Book) o;
         //comparing the book object's year. title and author, if all three are equal then only two Book objects are equal
         return aBook.year == year && aBook.title.equals(title) && aBook.author.equals(author);
     }

你将像下面这样调用上面的方法:-

Book object1=new Book();
Book object2=new Book();
object1.equals(object2);

场景 1:-代码中的第一行检查 object1 和 object2 是否引用同一对象:-

Book object1=new Book();
Book object2=object1;
object1.equals(object2);

以上情况在你的第一行处理,你可以看到在场景1中,object2基本上是object1的同一个当前对象。

你的 null 和 class 条件可以这样写:-

if((o == null) || (o.getClass() != this.getClass())) return false; //preferred

不要被诱惑使用:-

if(!(o instanceof Book)) return false; //avoid

因为如果参数是 class 书的子class,则上述条件无法 return 假。

在 equals 方法的最后一部分,您只是比较两个 Book 对象的三个属性,并且仅当所有三个属性都相等时才称两个对象相等。