5

考虑以下方法:

void a ()
{
    int x;
    boolean b = false;
    if (Math.random() < 0.5)
    {
        x = 0;
        b = true;
    }
    if (b)
        x++;
}

x++我收到“局部变量可能尚未初始化”错误。显然 x 永远不会在未初始化的情况下使用。除了初始化 x 之外,还有什么方法可以抑制警告?谢谢。

4

3 回答 3

6

不,Java 无法检查程序的所有可能代码路径以确定变量是否已初始化,因此它采用安全路线并警告您。

所以不,你必须初始化你的变量来摆脱这个。

于 2012-09-30T13:01:08.767 回答
2

有一个 :

void a () {
    if (Math.random() < 0.5) {
        int x = 1;
    }
}

编译器不负责设计和测试算法。你是。

但也许你应该提出一个更实际的用例。你的例子并没有真正表明你的目标是什么。

于 2012-09-30T13:00:23.140 回答
1

你为什么不简单地使用

void a ()
{
    int x;
    boolean b = false;
    if (Math.random() < 0.5)
    {
        x = 0;
        b = true;
        x++;
    }
    if (b) {
        //do something else which does not use x
    }
}

在代码中为什么要在第一个 if 块之外使用 x,所有涉及的逻辑x只能在第一个 if 块中实现,我没有看到需要使用另一个 if 块来使用 x 的情况.

编辑:或者您也可以使用:

void a ()
{
    int x;
    boolean b = (Math.random() < 0.5);
    if (b) {
         x=1
        //do something 
    }
}
于 2012-09-30T13:12:31.233 回答