首页 > 解决方案 > 编译时间常数如何在java内部工作

问题描述

我的问题是编译时间常数在内部是如何工作的,所以我们在下面的语句中没有得到错误。

final int a = 10;
byte b = a;

以及为什么我在此声明中出现错误。

int a = 10;
byte b = a;

标签: javaintbytefinal

解决方案


这是因为并非所有整数都适合一个字节。

在您的第一个示例中, 的值a是已知的并且不能更改。编译器知道它将适合一个字节。

在您的第二个示例中,因为a不是最终的,所以它可能已经更改(尽管在您的示例中没有)。Java 编译器不够聪明,无法注意到没有任何改变,因此不再确定它是否适合一个字节。

例如,看看这个:

    final int a = 10000;
    byte b = a;

因为a现在的值太大而无法放入 int,所以它不再编译。


推荐阅读