有一个关于代码逻辑的问题。为什么编译器不跳过这样的代码?
String testStr;
if (check > 0) {
testStr = "abc";
}
System.out.println(testStr != null ? testStr: "0");
编译时会抛出错误:
错误:(134, 32) java: ... 变量 testStr 可能尚未初始化
尽管在未初始化的情况下简单地打印“0”似乎是合乎逻辑的testStr……这里的逻辑是什么?
有一个关于代码逻辑的问题。为什么编译器不跳过这样的代码?
String testStr;
if (check > 0) {
testStr = "abc";
}
System.out.println(testStr != null ? testStr: "0");
编译时会抛出错误:
错误:(134, 32) java: ... 变量 testStr 可能尚未初始化
尽管在未初始化的情况下简单地打印“0”似乎是合乎逻辑的testStr……这里的逻辑是什么?
有两种方法可以解释此代码:
else. 在这种情况下,编译器会帮助他找到错误。testStr它将被初始化为null默认值。在这种情况下,编译器将强制程序员null显式地初始化变量。Java 开发人员得出的结论是:
Java 规范中定义了局部变量的强制初始化:
另请参阅英文版中对此问题的讨论:
在 Java 中,局部变量没有默认值。这意味着简单地声明一个变量将没有任何价值。在上面的代码中,使用 check<=0 时,变量在被访问时将保持未初始化状态,这是编译器发誓的。
这将解决问题