Auf*_*gel 4 java null initialization
我在这里遇到一个非常基本的问题,即使它必须存在,我也无法找到解决方案.
我有以下代码:
public class Foo {
public static void main(String[] args) {
String foo;
if (foo != null) {
System.out.println("foo");
} else {
System.out.println("foo2");
}
}
}
Run Code Online (Sandbox Code Playgroud)
它给了我
''变量可能尚未初始化''
.为什么我必须明确地指定null,并且默认情况下并非所有变量都用null初始化?
Jon*_*eet 15
它可以防止您在明确分配之前意外使用局部变量.这是一个好东西-它有助于防止错误.遗憾的是它不能用于字段(实例和静态变量) - 但除了最终变量之外,编译器不知道你什么时候读取它们与你要分配它们的时候 - 它无法告诉您要调用方法的顺序.在单个方法中,它有更多关于流量控制的信息,因此可以为您提供更多检查.
如果您希望局部变量的值为null,为什么不将它显式设置为null?这不仅让编译器感到高兴 - 它也清楚地说明了你的意图.
有关明确赋值的更多详细信息,请参见Java语言规范的第16章.
这是一个如何防止错误的例子:
Iterable<String> collectionOfNames = ...; // Some method call
String lastNameInCollection;
for (String name : collectionOfNames)
{
lastNameInCollection = name;
}
System.out.println("The last name was: " + lastNameInCollection);
Run Code Online (Sandbox Code Playgroud)
如果收集是空的,会发生什么?也许我们想打印"姓氏是:null" - 但也许我们应该做点其他事情.以上不能编译(lastNameIncollection可能没有分配)的事实迫使程序员考虑名称集合为空的情况.