我知道Java会强制您在使用它之前初始化每个局部变量.但在某些情况下,它会变得棘手.考虑一下:
public class TestClassOne {
public void methodOne() {
String s;
if(false)
System.err.println(s);
else
s = "Hi";
}
}
Run Code Online (Sandbox Code Playgroud)
这个类将成功编译.但是,这个不会:
public class TestClassTwo {
public void methodTwo() {
String s;
if("hola".equals("chau"))
System.err.println(s);
else
s = "Hi";
}
}
Run Code Online (Sandbox Code Playgroud)
为什么Java能够检测到if-block永远不会输入到第一个类而不是第二个类中?
编辑:
谢谢你的回答.
我正在寻找的是if-condition的正式表征,确保程序可以编译.
如果if条件是编译时布尔常量,那么可以安全地断定这个代码是否会编译?起初我会想"不,在大多数情况下你会得到'无法访问的代码'错误"(除了Jesper指出的文字错误案例),但我已经尝试了以下给定的结果:
if(false) ... //compiles
if(0 == 1) ... //compiles
final boolean b = false;
if(b) ... //compiles
Run Code Online (Sandbox Code Playgroud)