可以使用创建引用
Class_Name Var_Name;
Class_Name Var_Name=null;
我知道在这两种情况下 Var_Name 都被分配了 null 值。为引用分配 null(使引用无效)只是一个好的编码标准,还是分配 null 有任何逻辑或优势。
这不仅仅是一个好的编码。
您必须在 Java 中初始化变量。对于类的字段,您不必这样做,但实际上它们被初始化为 null。
对于局部变量,您不能像这样使用未初始化的变量:
String n;
n.length()
还发现了类似的问题:uninitialized vars
好吧,如果上面的声明是在实例级别的,那么显式分配 null 是多余的,因为实例变量获得了它们的默认值。但是对于局部变量,您应该在使用它之前初始化变量,否则会出现编译器错误
在类字段的情况下,根本没有区别。当创建类的实例时,未显式初始化的字段将使用该类型的默认值进行初始化;对于对象,默认值为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, ...);
将字段初始化为0-false-null
是多余的。
将字段显式设置为 0、false 或 null(视情况而定)是不必要且多余的。由于包含此语言功能是为了部分减少重复编码,因此充分利用它是一个好主意。坚持将字段显式初始化为 0、false 或 null 是一种习惯用法,可能不适合Java 编程语言。
取决于您的用例。
对于变量级别的变量,如果您不分配 null,如果您在为其分配值之前使用该变量,则会出现编译器错误。
对于类级别的变量,它只是多余的。