ClassType variable_name = null和ClassType variable_name之间的混淆很少;

时间:2013-07-01 10:50:50

标签: java oop object

可以使用

创建参考
Class_Name Var_Name;
Class_Name Var_Name=null;

我知道在两种情况下都会为Var_Name分配空值。 它是一个很好的编码标准,为引用分配null(使引用无效),或者是否有任何分配null的逻辑或优势。

5 个答案:

答案 0 :(得分:2)

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

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

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

String n;
n.length()

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

private MyClass myClass1;

相当于

private MyClass myClass1 = null;

因为两者都会导致myClass1null

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

public void myMethod() {
    MyClass myClass1;

    if(someCondition)
        myClass1 = new MyClass();

    myClass1.doSomething();
}

将无效,因为编译器无法保证myClass1将具有值。将该行更改为MyClass myClass1 = null;将是有效的,但在实践中,如果NullPointerException不成立,则可能会出现运行时错误(someCondition)。

你可以这样做:

MyClass myClass1;

// calculate some values

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

但这对我来说似乎毫无意义;在您实例化之前,不需要提及myClass1。而只是做:

// calculate some values

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

答案 4 :(得分:0)

取决于您的使用案例。

对于变量级变量,如果不指定null,如果在为其赋值之前使用该变量,则会出现编译器错误。


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