未初始化的对象与对象初始化为NULL

Sna*_*Doc 84 java null initialization

我在Java工作.

我通常会设置一些对象:

public class Foo {
    private SomeObject someName;

    // do stuff

    public void someMethod() {
        if (this.someName != null) {
            // do some stuff
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是:someName在这个例子中等于null,as-in我可以reliably for all objects假设null检查未初始化的对象是否准确?

das*_*ght 107

正确,未显式初始化的引用类型的静态和实例成员null都由Java 设置.同样的规则适用于数组成员.

Java语言规范,第4.12.5节:

变量的初始值

程序中的每个变量在使用其值之前必须具有值:

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

[...]对于所有引用类型,默认值为null.

请注意,上述规则排除了局部变量:必须显式初始化它们,否则程序将无法编译.

  • @xorinzor 您不能将“null”分配给“char”,因为它是原始类型。此外,如果稍后不分配“test”,您也无法在方法内执行“char test;”。如果需要,您可以执行“char test='a'”,或者在成员声明中将其保留为“char test;”以获得默认值“\0”。 (2认同)

Jar*_*sen 13

如果Object已声明引用但未实例化,则其值为null.

  • 这里值得精确 - 你永远不会声明一个对象.你声明一个*变量*.他们不是一回事. (9认同)
  • 仅作为类的实例字段. (8认同)
  • @SotiriosDelimanolis很抱歉提出了一个非常古老的讨论,但你碰巧有一个参考*为什么*他们认为它应该导致编译错误,而不是只是像实例字段一样初始化为`null`? (6认同)
  • @SnakeDoc如果在方法体中声明一个Object,如果在没有首先初始化它的情况下尝试使用它,则会出现编译错误. (5认同)