gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:20:47 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com