如果我创建一个对象并将其添加到我的ArrayList
中。 如果我使用完全相同的构造函数输入创建另一个对象,那么contains()
方法会将这两个对象评估为相同吗? 假设构造函数不对输入进行任何有趣的处理,并且存储在两个对象中的变量是相同的。
ArrayList<Thing> basket = new ArrayList<Thing>();
Thing thing = new Thing(100);
basket.add(thing);
Thing another = new Thing(100);
basket.contains(another); // true or false?
class Thing {
public int value;
public Thing (int x) {
value = x;
}
equals (Thing x) {
if (x.value == value) return true;
return false;
}
}
这样实现class
是否能使contains()
返回true
?
contains()
首先检查两个对象的hashCode
,然后才调用equals()
。如果hashCode
不同(对于两个不同的Thing
实例总是如此),则不会调用equals()
方法。一般来说,当您重写equals()
方法时,不要忘记同时重写hashCode()
方法。 - Sevastyan Savanyuk