我是 Java 的新手,在理解声明的概念和变量的初始化方面遇到了一些困难。
例如,当我这样做时:
public class Foo {
public static void main (String[] args) {
int x, y;
for (x = 0 ; x < 10 ; x++) {
y = x + 1;
}
System.out.println(x);
System.out.println(y);
}
}
它无法编译并提示“变量 y 可能尚未初始化”。 但是,如果我告诉它在循环后只打印出 x 值,它不会有任何问题。当然,如果我只是在一开始就声明它(比如 int y = 0; 或类似的东西)它会起作用,但我想知道为什么打印 x 而不是 y。
提前致谢!
编辑:
我知道编译器实际上并没有在循环内部检查变量是否会被初始化,所以它只是说它可能没有被初始化,但是为什么下面的代码可以工作?编译器是否检查 if 循环而不检查 for 循环?
public class Foo {
public static void main (String[] args) {
int x = 0, y;
if (x == 0) {
y = 1;
}
else {
y = 2;
}
System.out.println(y);
}
}
编辑 2:
如果我实际上为 else 部分提供另一个条件,它看起来会给我同样的错误:
if (x == 0) {
y = 1;
}
else if (x == 1) {
y = 2;
}
所以我猜另一个例子是可行的,因为 y 在 if 和 else 部分都被初始化了,这意味着无论给定的条件是什么,y 总是会被初始化。现在我真的明白了。谢谢!!
最佳答案
局部变量没有默认值,您需要对其进行初始化。您当然设置了 x 的值 (x=0
),但编译器不会检查是否实际进入循环体。所以给 y
一个 0
的值。
关于Java:对变量初始化概念感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9324254/