这个最终的整数变量初始化有什么问题?

What is wrong in this final integer variable initialization?

我尝试了这段代码并进行了大量的重新更正。但我找不到为什么 illegal.Exlain 理论上有什么问题?

class Example{
    public static void main(String args[]){
        final int y;
        y=100;
        byte b;
        b=y;
    }
}

我猜你是在问为什么那个代码给你

Example.java:6: error: incompatible types: possible lossy conversion from int to byte

   b=y;
     ^

但这段代码没有:

class Example{
    public static void main(String args[]){
        final int y=100; // <=======
        byte b;
        b=y;
    }
}

原因是,如果您不提供该值作为初始值设定项(稍后通过赋值对其进行分配),编译器不会将其视为编译时常量,因此不知道该值将适合 byte。部分原因是因为要将其视为编译时常量,编译器必须处理您这样做的可能性:

class Example{
    public static void main(String args[]){
        final int y;
        if (Math.random() < 0.5) {
            y=100;
        } else {
            y=1000;
        }
        byte b;
        b=y;
    }
}

因此编译器仅在 100 是初始化程序时将其作为编译时常量处理,而不是在它是赋值时处理。