我无法找到原因:
变量可能尚未初始化
示例1:
class Test {
public static void main(String[] args) {
int i = 10;
int j;
if (i == 10) {
j = 20;
}
System.out.println(j);
}
}
Test.java:11: error: variable j might not have been initialized System.out.println(j); ^ 1 error
示例2:
class Test {
public static void main(String[] args) {
int i = 10;
int j;
if (i == 10) {
j = 20;
} else {
j = 30;
}
System.out.println(j);
}
}
输出:
20
我的疑问是在第二个例子中,j
是如何初始化的?
答案 0 :(得分:3)
第一种情况,如果i!= 10 j在
期间不会被初始化System.out.println(j);
在第二个例子中,j总是有一个值(i!= 10 j将是30)
System.out.println(j);
介意
**might not** be initialized
答案 1 :(得分:0)
而不是int j;
,您必须拥有int j = null;
。
答案 2 :(得分:0)
在第二个例子中,j是如何初始化的?
j
已初始化,因为您已为所有可能的案例提供了路径......
i
等于10
(行if(i == 10) {
)i
不等于10
(行} else {
)无论如何,j
都会被初始化。
在您的第一个解决方案中,情况并非如此。如果i
不等于10
,那么j将不会被初始化,Java也不会那样。 Java并不关心你的逻辑中i
等于10
,它只关心存在j
未初始化的情况。
答案 3 :(得分:0)
对于局部变量,JVM不会提供任何默认值,我们必须在使用该变量之前显式执行初始化。
在示例1中 无法保证在运行时在逻辑块内初始化局部变量,在您的情况下,只有if语句如果不是真的那么初始化将如何发生,因为你得到这个错误。
在示例2中 你已经同时使用了if,else语句,所以如果condition为true,那么变量j将被初始化,如果条件为false,那么j也将被初始化。 (在示例2中,通过 if或者变量 j 将被初始化),因为您没有收到任何错误。