为什么这个Java代码会产生错误?

Pin*_*nky 0 java

我尝试用Java编译这段代码:

class D
{
    public static void main(String arg[])
    {
        f1();
    }

    static void f1()
    {
        int a;
        int b=5;
        for(;b<=10;b++)
            a=b;
        System.out.println(a);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是它会产生一个错误,表示:变量'a'可能尚未初始化.为什么会发生这种情况,尽管a在for循环中设置了?

Tho*_*mas 5

循环可能无法运行(编译器不确定),因此a可能无法初始化.

这不会在循环中执行print语句,只是赋值:

for(;b<=10;b++)
  a=b;
System.out.println(a); //this will only run after the loop.
Run Code Online (Sandbox Code Playgroud)

在上述情况下,如果b> 10循环之前那么a=b;永远不会被执行,并且打印语句会得到未初始化a.

我认为你的意思是:

for(;b<=10;b++) {
  a=b;
  System.out.println(a);
}
Run Code Online (Sandbox Code Playgroud)

如果您打算a在循环后打印,请将其初始化为适当的值,例如int a = 0;.