我正在经历那些奇怪的时刻之一。
ArrayList<Object> a = new ArrayList<Object>();
a.add(new Socket());
a.add(new Thread());
a.add("three");
a.add(a);
a.add(new Object());
for(Object output : a) {
System.out.println(output);
}
输出:
Socket[unconnected]
Thread[Thread-0,5,main]
three
[Socket[unconnected], Thread[Thread-0,5,main], three, (this Collection)]
java.lang.Object@615e7597
每次我运行这个,新对象总是给出相同的十六进制字符串(Java 文档 Integer.toHexString(hashCode())
),这是为什么?为什么这不会每次都产生不同的字符串?还是因为它可以重用同一个对象?
编辑:我尝试多次执行 Java 应用程序。
最佳答案
对象的哈希码通常是根据其内部地址计算的(引用 http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode%28%29 ),因此如果您以相同的状态重新运行程序,则对象在内存中的地址可能每次都相同.
从技术上讲,这不是重复使用同一个对象,因为您正在退出 JVM;它只是每次都遵循相同的步骤,在内存中的相同位置创建相同的对象,这会为 toString() 返回相同的哈希码。
关于java - `new Object()' 好像没有创建新对象,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20119856/