Java 为什么在本例中调用hashcode?

Java 为什么在本例中调用hashcode?,java,hashcode,Java,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.Ar

有人能解释一下为什么在下面的例子中被调用吗

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();
    }
}
我相信它是Object.toString()方法的一部分,所有对象都有,除非您在自己的类中重写了toString()。试试看。

默认的
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()
以显示before/super call/after详细信息。)

它记录在
Object.toString()中:

class对象的toString方法返回一个字符串,该字符串由对象作为实例的类的名称、at符号字符“@”和对象哈希代码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode())
因为
对象中的
toString()
实现调用它

 public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

覆盖
toString
,它将不会被调用您是否尝试过在调试器中获取堆栈跟踪或在第行添加断点?查看编号
1bab50a
c3c749
并查看它与对象的hashcode.Thx的比较,这将是一个巨大的线索。这也是正确的,但只能给出一个正确答案。给你滴答声:)谢谢。这也是正确的,但只能给出一个正确答案。给你一个提示:)
getClass().getName() + '@' + Integer.toHexString(hashCode())
 public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }