0

可以使用创建引用

Class_Name Var_Name;
Class_Name Var_Name=null;

我知道在这两种情况下 Var_Name 都被分配了 null 值。为引用分配 null(使引用无效)只是一个好的编码标准,还是分配 null 有任何逻辑或优势。

4

5 回答 5

2

这不仅仅是一个好的编码。

您必须在 Java 中初始化变量。对于类的字段,您不必这样做,但实际上它们被初始化为 null。

对于局部变量,您不能像这样使用未初始化的变量:

String n;
n.length()

还发现了类似的问题:uninitialized vars

于 2013-07-01T10:52:46.750 回答
2

好吧,如果上面的声明是在实例级别的,那么显式分配 null 是多余的,因为实例变量获得了它们的默认值。但是对于局部变量,您应该在使用它之前初始化变量,否则会出现编译器错误

于 2013-07-01T10:53:52.023 回答
1

在类字段的情况下,根本没有区别。当创建类的实例时,未显式初始化的字段将使用该类型的默认值进行初始化;对于对象,默认值为null. 所以:

private MyClass myClass1;

相当于

private MyClass myClass1 = null;

因为两者都会导致myClass1存在null

在方法变量的情况下,存在相当大的差异。变量必须声明一个值,即使那是null,否则当您稍后尝试使用它时会出现(潜在的)编译器错误。做这样的事情:

public void myMethod() {
    MyClass myClass1;

    if(someCondition)
        myClass1 = new MyClass();

    myClass1.doSomething();
}

将是无效的,因为编译器不能保证它myClass1会有一个值。将该行更改MyClass myClass1 = null;为有效,但实际上NullPointerException如果不正确,您可能会收到运行时错误 (a) someCondition

你可以这样做:

MyClass myClass1;

// calculate some values

myClass1 = new MyClass(arg1, arg2, ...);

但这对我来说似乎毫无意义;myClass1在您实例化它之前无需提及。相反,只需执行以下操作:

// calculate some values

MyClass myClass1 = new MyClass(arg1, arg2, ...);
于 2013-07-01T10:57:54.733 回答
1

将字段初始化为0-false-null是多余的。

将字段显式设置为 0、false 或 null(视情况而定)是不必要且多余的。由于包含此语言功能是为了部分减少重复编码,因此充分利用它是一个好主意。坚持将字段显式初始化为 0、false 或 null 是一种习惯用法,可能不适合Java 编程语言

于 2013-07-01T10:56:06.713 回答
0

取决于您的用例。

对于变量级别的变量,如果您不分配 null,如果您在为其分配值之前使用该变量,则会出现编译器错误。


对于类级别的变量,它只是多余的。

于 2013-07-01T10:53:22.160 回答