[翻译]未初始化对象与对象初始化为null

原文

问题:

我正从事Java的工作.我通常如下设置一些对象:

1
2
3
4
5
6
7
8
9
10
11
public class Foo {
private SomeObject someName;
// do stuff
public void someMethod() {
if (this.someName != null) {
// do some stuff
}
}
}

问题是:someName在这个例子里等于null,我是否可以可靠地为所有对象假设为空检查未初始化对象,这是否准确?

最佳回答:
正确,在Java里所有引用类型的静态以及实例成员,没有显式地初始化的,都会被设为null.这个规则同样适用于数组成员.

从Java语言规范, 4.12.5部分可知:

1
2
3
4
5
6
7
变量的初始值
在程序里的每一个变量在使用之前都必须有一个值:
每个类变量,实例变量或者数据部分在被创建的时间会被初始化为一个默认值.
[...] 对于所有引用类型,默认值为null.

注意,以上规则不包括局部变量:它们必须显式地初始化,否则程序不会被编译.