remove是根据每个对象生成的hashcode和equals方法来判断的。
new对象的时候,就在堆里新开辟了空间存储这个对象。每个对象生成的hashcode都不一样。
想要属性一样就被删除的话,需要重写hashcode()和equals().
java里所有的类都是Object的子类,都默认继承了Object类。存在继承关系,所有父类所在的地方,子类都能够替换父类继续运行。比如说 父亲有一辆车,儿子继承了父亲,那么父亲所有非私有的东西儿子都可以用,这个时候,要求 父亲开车去哪哪,但是实际上 父亲开车去和儿子开车去的结果是一样的,他们都可以开着那个车去。
所以说在这里,声明是Object类,但是实际上传什么类都是可以的,因为所有类都是Object的子类。
追问有的书上的程序重写equals方法直接return true,为什么这个程序要写那么多?
追答比如我们判断String是否相等,能够直接使用euqals()进行判断,是因为String类里重写的equals()
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
当你想按照自己的想法判断 自定义的类是否相等,就必须重写equals().
你看的什么书?有的书上是为了说明一些例子,直接返回true,这样无论对象是什么,肯定都相等。
追问看的是王薇的Java程序设计与实践教程,我还有一个疑问,重写的equals方法传入的obj对象是哪一个对象?