【发布时间】:2013-12-30 16:03:28
【问题描述】:
这是我尝试过的:
public final class firstObj{
public static void main(String args[]){
Object obj = new Object();
Object obj1 = new Object();
System.out.println(obj);
System.out.println(obj1);
}
}
我一开始编译了程序,连续运行了两次, 我得到了两个不同的输出:
输出1:
java.lang.Object@6f548414
java.lang.Object@65ab7626
输出 2:
java.lang.Object@659c2931
java.lang.Object@6f548414
想知道为什么JVM在第二次运行的时候把第二个对象的位置换成第一个对象的位置了..,很迷惑..,
【问题讨论】:
-
你为什么在乎?我不是要刻薄。原因深藏在特定于平台的 java 内存管理的细节中。除非您正在做一些异国情调/高级的事情,否则请相信 java 会解决这个问题。如果您有某些特定需求,那么您可能会采取有问题的方法。
-
该数字基于对象的堆地址。真的很随意。
-
两个对象,即使它们在您看来相同,也不一定在内存中的位置相同。字符串是唯一的,因为两个字符串可能共享相同的地址,因为它们是相同的(这里发生了 JVM 魔术)。
-
@SnakeDoc - 如果两个字符串“共享”同一个地址,它们就是同一个对象。
-
@HotLicks 这就是我的意思......也许我可以更清楚。
标签: java