错误:变量可能尚未初始化

时间:2016-04-01 20:01:22

标签: java

我无法找到原因:

  

变量可能尚未初始化

示例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是如何初始化的?

4 个答案:

答案 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 将被初始化),因为您没有收到任何错误。