if语句示例问题在条件上出现错误,并且在一种情况下没有出现错误

问题描述 投票:0回答:1

我正在尝试执行以下if语句代码,并收到一条错误消息,指出“变量j可能尚未初始化”。

示例1:

public class PrimitiveTypesChallenge {

   public static void main(String[] args) {

        int i = 10;
        int j;
        if(i == 10) {
            j = 20;
        }

        System.out.println(j);
    }
}

我在if块中初始化了j变量的值。

示例2:

public class PrimitiveTypesChallenge {

   public static void main(String[] args) {

        int i = 10;
        int j;
        if(i == 10) {
            j = 20; 
        }
        else {
           j = 30;
        }

        System.out.println(j);
    }
}

在两个示例中,如果条件为真,但是示例1中出现错误,示例2中没有错误。我对这两种情况感到困惑。有人可以帮助我了解其背后的整个概念吗?

java
1个回答
0
投票

在示例1中,条件始终为真

We知道这一点,但是编译器不够聪明,无法发现这一事实。我们知道这是因为我们阅读了代码并在脑海中评估了表达式i==10。编译器不会这样做。编译器可以计算constant expressions,并且i==10不是常量表达式,因为它涉及variable i

因此,编译器不知道示例1中的i==10始终为true,因此它认为i==10可能为false。在这种情况下,j将不会初始化,因此会出现错误。

您可以说i==10i,从而使final为常数表达式:

final int i = 10;

因此编译器知道i的值是常数。

© www.soinside.com 2019 - 2024. All rights reserved.