程序代码:
public class ExplorationJDKSource { /** * @param args */ public static void main(String[] args) { System.out.println(new A()); } } class A{};
运行结果:
A@2a139a55
为啥会产生这样的结果??!!
原因分析:
main方法实际上调用的是: public void println(Object x),这一方法内部调用了String类的valueOf方法。
valueOf方法内部又调用Object.toString方法:
public String toString() { return getClass().getName() +"@" + Integer.toHexString(hashCode()); }
hashCode()方法是本地方法,由JVM设计者实现: public native int hashCode();
所以通过层层调用结果就显示出了 类名+@+哈希值。