有人可以解释为什么在下面的示例中调用hashCode?
import java.util.List;
public class JSSTest extends Object{
public static void main(String args[]){
JSSTest a = new JSSTest();
JSSTest b = new JSSTest();
List<JSSTest> list = new java.util.ArrayList<JSSTest>();
list.add(a);
list.add(b);
System.out.println(list.get(0));
System.out.println(list.get(1));
}
@Override
public boolean equals(Object obj){
System.out.println("equals");
return false;
}
@Override
public int hashCode(){
System.out.println("hashCode");
return super.hashCode();
}
}
结果:
hashCode 0
JSSTest@1bab50a
hashCode 0
JSSTest@c3c749
答案 0 :(得分:15)
默认toString()
实施调用hashCode
。这与列表无关。
这是一个相当小的复制品:
public class JSSTest {
public static void main(String args[]){
JSSTest test = new JSSTest();
// Just to show it's not part of creation...
System.out.println("After object creation");
test.toString();
}
@Override
public boolean equals(Object obj){
System.out.println("equals");
return false;
}
@Override
public int hashCode(){
System.out.println("hashCode");
return super.hashCode();
}
}
(您可以覆盖toString()
以显示在/超级电话/详细信息之后。)
它记录在Object.toString()
:
类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”和对象的哈希码的无符号十六进制表示组成。换句话说,此方法返回一个等于值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
答案 1 :(得分:7)
System.out.println(list.get(0));
我相信它是Object.toString()方法的一部分,除非你在自己的类中覆盖toString(),否则所有对象都有。试试看,然后看看。
答案 2 :(得分:6)
因为toString()
中的Object
实现调用它..
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
覆盖toString
,不会被称为