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 对象的三个属性,并且仅当所有三个属性都相等时才称两个对象相等。
我在理解这段代码时遇到了一些困难。我知道我需要创建一个方法来比较非内置函数,但是有人可以向我详细解释布尔值 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 对象的三个属性,并且仅当所有三个属性都相等时才称两个对象相等。