小编Lea*_*van的帖子

在检测未初始化的局部变量时,Java有多聪明?

我知道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)

java initialization

1
推荐指数
1
解决办法
62
查看次数

标签 统计

initialization ×1

java ×1