java - `new Object()' 好像没有创建新对象,为什么?

标签 java object

我正在经历那些奇怪的时刻之一。

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/

相关文章:

java - JRuby DSL封装,排除标准库

javascript - 从数组中的对象方法访问数组

java - 无需变量赋值的对象创建

java - 如果第一次测试断言失败,如何中断 Jmeter 测试周期?

Java MouseListener 在按下鼠标时禁用 MouseMotionListener

android - JSON 对象到 listView

java - 将未知数量的对象添加到数组列表

java - 将对象传递给抽象类?

java - _ClassInstance 符号?

java - 如何在特定用例的reduceByKeyAndWindow()中实现invFunc