初始化未初始化的实例变量时会发生什么?

时间:2014-02-05 00:28:02

标签: java

当我声明一个实例变量时,例如:

BSTNode node;

我知道node现在为null,因为实例变量未初始化。但是,是否分配了一些内存以存储null的值,node现在是对该位置的引用?

我尝试使用

System.out.println(node);

希望我能看到引用的地址,但只看到"null"打印出来。为什么我看不到地址?

4 个答案:

答案 0 :(得分:3)

如果代码未显式初始化它们,则将实例变量初始化为其默认值。根据{{​​3}}:

,所有参考变量都初始化为null
  

每个类变量,实例变量或数组组件在创建时都使用默认值进行初始化(§15.9,§15.10):

...

  

对于所有引用类型(第4.3节),默认值为null。

null传递给System.out.println时,会输出字符串文字"null"println的Javadoc遵循JLS Section 4.12.5来涵盖null传递时发生的事情:

  

如果参数为null,则打印字符串“null”。

没有地址,因为还没有对象。

答案 1 :(得分:1)

是的,无论初始化如何,都会分配内存并分配值。

没有“未初始化”这样的东西:显式初始化,或使用默认值初始化。

答案 2 :(得分:0)

Java没有像C / C ++这样的指针。永远不会看到对象所在的内存指针。如果你能得到它,它甚至可能因为垃圾收集可能会移动它。

如果您打印一个对象,它将成为一个字符串,调用toString()。

答案 3 :(得分:0)

node现在是对该位置的引用吗?”

null如何在记忆中表现出来?

这是特定于实现的,您将无法在纯Java程序中看到null的表示。 (但是在大多数(即使不是所有Java实现)中,null都表示为零机器地址/指针。)

There is already a very detailed answer to this question in Stackoverflow: You should check it out!

另请注意video by Tony Hoare, "Null References: The Billion Dollar Mistake"