首页 > 解决方案 > 这个最终的整数变量初始化有什么问题?

问题描述

我尝试了这段代码并进行了很多更正。但我找不到为什么它是非法的。从理论上解释什么是错误的?

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

标签: javavariablesinitialization

解决方案


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

Example.java:6:错误:不兼容的类型:从 int 到 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在它是初始化程序时作为编译时常量处理,而不是在它是赋值的值时处理。


推荐阅读