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

问题描述 投票:-2回答:1

我尝试了很多重新纠正此代码。但是我找不到为什么它是非法的。请解释理论上的错误是什么?

class Example{
    public static void main(String args[]){
        final int y;
        y=100;
        byte b;
        b=y;
    }
}
java variables initialization
1个回答
0
投票

我猜你是在问为什么该代码给了你

Example.java:6:错误:不兼容的类型:从int到字节的可能有损转换

   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作为编译时常量处理,而在将其作为赋值时则不会处理。

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