Den*_*nis 3 java variables compiler-errors initialization declaration
我是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);
}
}
Run Code Online (Sandbox Code Playgroud)
它没有编译,并说"变量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);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2:
看起来它给了我同样的错误,如果我实际上为else部分给出另一个条件,那么它将是:
if (x == 0) {
y = 1;
}
else if (x == 1) {
y = 2;
}
Run Code Online (Sandbox Code Playgroud)
所以我猜另一个例子是有效的,因为y在if和else部分都被初始化了,这意味着无论给出的条件是什么,y都会被初始化.现在我真的明白了.谢谢!!
如果你查看你的代码; 你已经在for循环中将x初始化为0,然后用x ++递增它.但是你正在初始化Y内部循环,这可能会或可能不会在运行时执行(与编译时无关).在Java中,您必须在使用之前初始化局部变量,如果您不这样做,编译器将提示错误.这就是x被打印而不是Y的原因
| 归档时间: |
|
| 查看次数: |
928 次 |
| 最近记录: |