非初始化和初始化为 null 有什么区别?

2022-09-02 20:44:55

我有这个代码:

MyClass object;

.... some code here where object may or may not be initialised...

if (object.getId > 0) {
    ....
}

这会导致编译错误:可能尚未初始化,这很公平。object

现在我将代码更改为:

MyClass object;

.... some conditional code here where object may or may not be initialised...

if (object != null && object.getId > 0) {
     ....
}

我得到相同的编译错误!我必须初始化为空:object

MyClass object = null;

那么,不初始化对象和初始化为 null 之间有什么区别呢?如果我声明一个对象没有初始化,它不就是空的吗?

谢谢


答案 1
  • 字段(成员变量)初始化为(或默认基元值,如果它们是基元值)null
  • 局部变量未初始化,您负责设置初始值。

答案 2

这是一个语言定义的事情。

该语言指出,METHOD范围的变量必须手动初始化 - 如果您希望它们以NULL开头,则必须明确说明 - 如果您不这样做,它们基本上处于未定义状态。

相反,该语言声明CLASS范围的变量不需要手动初始化 - 如果初始化它们失败,它们会自动初始化为NULL - 所以你不必担心它。

至于两种状态之间的差异(null与未定义),是的,它们基本上是相同的 - 但是语言规定您需要初始化一个变量(无论这是否自动为您完成,这取决于变量的作用域)。