当我一次又一次地运行Java代码时,它会打印p
地址的不同值。那是为什么?
点代码:
class Point {
}
主要代码:
public class HelloWorld
{
public static void main(String[] args) {
Point p = new Point();
System.out.println(p);
p = null;
System.gc();
}
}
控制台日志:
test.Point@44585f2a
test.Point@5cfe174
test.Point@44585f2a
test.Point@44585f2a
test.Point@5cfe174
test.Point@44585f2a
答案 0 :(得分:4)
打印出getClass().getName() + '@' + Integer.toHexString(hashCode())
,而不是地址。 Reference
另外,为什么每次启动程序时地址都一样?其他一些过程可以在程序执行之间占据一席之地。
另外,我发现你正在调用System.gc ();
小心!它并不总是按照人们的期望去做! Reference
答案 1 :(得分:0)
你在这里看到的(对象的toString实现)是可能而不是实际的地址。它是对象的标识哈希码。这可能是也可能不是堆中对象的实际地址。
JVM将堆中的对象移动到不同的位置,原因有多种,因此地址发生了变化。
由于您将其分配给null,并且垃圾收集器的异步调用可能会将对象移动到堆的另一部分。