对班级地址的考试

时间:2015-10-29 05:23:24

标签: java

当我一次又一次地运行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

2 个答案:

答案 0 :(得分:4)

打印出getClass().getName() + '@' + Integer.toHexString(hashCode()),而不是地址。 Reference

另外,为什么每次启动程序时地址都一样?其他一些过程可以在程序执行之间占据一席之地。

另外,我发现你正在调用System.gc ();小心!它并不总是按照人们的期望去做! Reference

答案 1 :(得分:0)

你在这里看到的(对象的toString实现)是可能而不是实际的地址。它是对象的标识哈希码。这可能是也可能不是堆中对象的实际地址。

JVM将堆中的对象移动到不同的位置,原因有多种,因此地址发生了变化。

由于您将其分配给null,并且垃圾收集器的异步调用可能会将对象移动到堆的另一部分。