Java扩展final变量

4

我正在阅读Java OCA认证文档。一些原始操作的行为对我来说似乎很奇怪。

据说当作为算术运算符的操作数时,所有byteshortchar值都会自动扩展为int。这是完全合理的。但是当我们将这些操作数声明为final时,就会出现混淆。

这段代码将无法编译(逻辑上不正确)。

 short s1 = 10 ;
 short s2 = 20 ;
 short sum = s1 + s2;

但这个会编译。
  final short s1 = 10 ;
  final short s2 = 20 ;
  short sum = s1 + s2; 

为什么这段代码可以成功编译?关键字final的什么属性使得这段代码能够编译通过?

2
关键字final的哪个属性使得这段代码能够编译通过?没有。这是由于编译器进行了常量折叠优化。 - Elliott Frisch
1个回答

6

这将使s1和s2成为编译时常量表达式,因此加法是由编译器完成的,而不是在运行时完成的,所以代码等效于

short sum = 30; 

编译器因此能够知道分配给sum的值小到可以适应short类型,因此编译。

完成了亲爱的JB Niezet。但我认为数据范围的精度是有用的。不管怎样,我删除了答案。 - soung
编译器因此能够知道分配给sum的值足够小,适合放入short中。 - JB Nizet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接