可以在编译时评估表达式吗?

Raj*_*esh 1 java static final

public class Test1 {
    static final int i;
    static{
        if(3<2){
        i = 0;
        }
    }   
}
Run Code Online (Sandbox Code Playgroud)
public class Test2 {
    static final int i;
    static{
        if(3>2){
        i = 0;
        }
    }   
}
Run Code Online (Sandbox Code Playgroud)

Test1编译失败,Class Test2编译成功.

任何人都可以告诉我编译器如何能够在if条件下评估表达式吗?

小智 5

static final int i;
Run Code Online (Sandbox Code Playgroud)

需要在静态初始化器初始化,因为它是最终的.

static{
        if(3<2){
        i = 0;
        }
    }
Run Code Online (Sandbox Code Playgroud)

因为3 <2字面或常量,编译器能够检测到你死的部分代码并且不初始化i.

添加一个else案例并在i那里做一些初始化.