我想了解为什么 indexOf 函数不调用覆盖方法 equals 。我有这门课:
class Test {
public Integer _test;
public Test(Integer test) {
_test= test;
}
@Override
public int hashCode() {
return Objects.hash(_test);
}
@Override
public boolean equals(Object obj) {
System.out.println("equals function called");
if (!(obj instanceof Integer)) return super.equals(obj);
Integer test = (Integer) obj;
return _test == test;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的主要代码:
List<Test> listTest = new Arraylist<Test>();
listTest.add(new Test(1));
System.out.println(listTest.indexOf(new Integer(1)));
Run Code Online (Sandbox Code Playgroud)
输出:-1
请注意,如果我这样做,则调用 equals 函数:
List<Test> listTest = new Arraylist<Test>();
listTest.add(new Test(1));
System.out.println(listTest.indexOf(new Test(1)));
Run Code Online (Sandbox Code Playgroud)
输出:-1 等于调用的函数