看马士兵老师的Java基础教程,里面的有这么一段程序,packageit.java.Collection;importjava.util.*;publicclassTestCollection{publicstaticvoidmain(String[]args){Collection
看马士兵老师的Java基础教程,里面的有这么一段程序,
package it.java.Collection;
import java.util.*;
public class TestCollection {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("hello world!");
c.add(new Integer(100));
c.add(new Name("f1", "f2"));
System.out.println(c);
System.out.println(c.remove(new Name("f1", "f2")));
System.out.println(c);
}
}
class Name {
String firstName;
String secondName;
Name(String firstName, String secondName) {
this.firstName = firstName;
this.secondName = secondName;
}
public String getFirstName() {
return firstName;
}
public String getSecondName() {
return secondName;
}
public String toString() {
return firstName + " " + secondName;
}
public boolean equals(Object obj){
if(obj instanceof Name){
Name name=(Name)obj;
return (firstName.equals(name.firstName)&&secondName.equals(name.secondName));
}
else{
return super.equals(obj);
}
}
}
如果我不在Name类里面重写equals()方法的话,我的System.out.println(c.remove(new Name("f1", "f2")));这句话打印的永远都是false;但是为什么重写了之后就变成了true了呢?难道说remove()方法移除容器里面的对象时,要先判断要删除的对象和容器里面的对象相等才能删除吗?这是一个怎么样的过程呢?求大神解答,新手不懂好纠结.
展开