【问题标题】:java widening final variable [duplicate]java扩大最终变量[重复]
【发布时间】:2020-04-23 07:01:45
【问题描述】:

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

据说当用作算术运算的操作数时,所有byteshortchar 值都会自动扩大到int。这是完全合乎逻辑的。但是当我们使这个操作数最终化时,混乱就来了。

这段代码不会编译(逻辑)

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

但是这个会编译

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

为什么会编译成功?关键字final 的什么属性使这段代码编译?

【问题讨论】:

  • 关键字 final 的什么属性使这段代码可以编译? 什么都没有。您正在达到 compiler 优化导致 constant folding.

标签: java primitive operation


【解决方案1】:

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

short sum = 30; 

因此,编译器能够知道分配给sum 的值小到可以放入short,从而编译。

【讨论】:

  • 完成了亲爱的 JB Niezet。但我在想数据范围的精度是有用的。 Nethermind 我删除了anwser
  • 因此编译器能够知道分配给 sum 的值足够小,可以放入 short
猜你喜欢
  • 1970-01-01
  • 2015-08-12
  • 2011-11-25
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 2011-11-07
相关资源
最近更新 更多