在Java中,有什么区别和最佳方法?
Integer x = null; // x later assign some value.
Integer y; // y later initialize and use it.
答案 0 :(得分:8)
答案取决于您所指的变量类型。
对于类变量,没有区别,请参阅JLS - 4.12.5. Initial Values of Variables:
...程序中的每个变量必须在其值之前具有值 使用:
对于所有引用类型(§4.3),默认值为
null
。
含义,没有区别,后者隐式设置为null
。
如果变量是 local ,则在将它们传递给方法之前必须先分配它们:
myMethod(x); //will compile :)
myMethod(y) //won't compile :(
答案 1 :(得分:3)
完全没有区别。无论何时你想要使用它,局部变量必须是初始化形式(必须有一个值)。
来自Java
doc
类似于对象如何在字段中存储其状态,方法将如此 经常将其临时状态存储在局部变量中。的语法 声明局部变量类似于声明一个字段(for 例如,int count = 0;)。没有特殊的关键字指定a 变量为本地变量;这个决定完全来自这个地方 声明变量的位置 - 在开头和开头之间 关闭方法的大括号。因此,局部变量仅可见 他们被宣布的方法;他们无法访问 来自班上其他人。
答案 2 :(得分:3)
最好不要将其设置为null,否则您可能会意外地使用它并导致NPE。编译器不会帮助您编译错误。如果你想要if(x!= null){/ 使用它 /}
之类的逻辑,则只设置为null答案 3 :(得分:3)
必须在使用之前将局部变量分配给某些东西。
Integer x = null;
myFunction(x);
// myFunction is called with the argument null
Integer y;
myFunction(y);
// This will not compile because the variable has not been initialised
如果没有显式初始化类变量,则总是将类变量初始化为默认值(对象类型为null
,对于基元类似于零)。局部变量不会被隐式初始化。
答案 4 :(得分:1)
没有任何差异可以预期一件事,如果你没有初始化它,稍后你试图使用这个变量(不改变引用)意味着在编译时出错,但是如果你初始化它并且你使用它稍后(不更改引用)表示NullPointerException。
我给你看一个例子。
不初始化
Integer y;
y.intValue(); // Compilation error
初始化
Integer x = null;
x.intValue(); // You are able to compile it but NullPointerException
答案 5 :(得分:1)
内部没有区别。这也是一个值得商榷的话题。
仅在确实需要时才使用局部变量。局部变量主要在以下场景中(我可能会缺少其他几个)。
作为简写或可读性
Integer myObject = someObject.someFunction().someOtherFunction();
如果我们在很多地方使用这样的语法,代码就会变得笨拙。
用于辅助功能
Object returnObject = null;
if(mycondition)
{
returnObject = value1;
}
else if(secondCondition)
{
returnObject = value2;
}
return returnObject;
上述代码段的调用者将根据返回值做出决定。 老实说,我没有看到其他有效的用例来声明没有初始值的变量。
结论(最佳实践):