Java对象中的.equals()方法

时间:2015-08-23 17:10:58

标签: java compare equals built-in

我在理解这段代码时遇到了一些麻烦。我知道我需要创建一个比较非内置函数的方法,但有人可以向我解释一下布尔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);
     }
}

这是朋友给我的,如果你有任何改进建议,请告诉我。

1 个答案:

答案 0 :(得分:1)

在您的代码中查看我的评论: -

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和类条件可以写成: -

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

不要试图使用: -

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

因为如果参数是类Book的子类,则上述条件无法返回false。

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