首先,我们需要明确,==比较的是两个对象的地址,基本类型全部可用==比较(比较的是基本类型元素的值),可是除了基本类型之外的引用类型,如String,因不可比较地址,但其equals方法覆写了,所以可用作比较值。只有覆写了equals方法的才可以比较值,否则都是比较地址(由Object类中的equals得到)。
在关于集合的删除,查询中,一般需要覆写equals方法,因为如不覆写,则不知道通过什么来比较。
public class Book {
private int num;
private String name;
public Book(int num, String name) {
super();
this.num = num;
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Book [num=" + num + ", name=" + name + "]";
}
@Override
public boolean equals(Object obj) { //==比较的是地址,equals比较的是值
if(this==obj){
return true;
}
if(obj==null){
return false;
}
if(!(obj instanceof Book)){
return false;
}
Book book=(Book)obj;
if(this.num==book.num&&this.name.equals(book.name)){
return true;
}
return false;
}
}
public class test {
public static void main(String[] args) {
Book b1=new Book(20, "java开发");
Book b2=new Book(20, "java开发");
System.out.println(b1.equals(b2));
}
}
equals方法的覆写可有编译器自动生成,理解原理即可。