Java:“本地变量可能尚未初始化”不够聪明?

问题描述 投票:5回答:3

考虑以下方法:

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

关于x++,我收到“本地变量可能尚未初始化”错误。显然,x永远不会未经初始化就使用。除了初始化x之外,还有什么方法可以抑制警告?谢谢。

java variables compiler-errors local initialization
3个回答
6
投票

[不,Java无法检查程序的所有可能代码路径来确定变量是否已初始化,因此它采取了安全途径并发出警告。

因此,您将必须初始化变量来摆脱此问题。


2
投票

有一个:

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

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

但是也许您应该提出一个更实际的用例。您的示例并未真正显示您的目标。


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块中实现,我看不到需要使用另一个逻辑的情况如果使用x阻止。

编辑:或您也可以使用:

void a ()
{
    int x;
    boolean b = (Math.random() < 0.5);
    if (b) {
         x=1
        //do something 
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.