sou*_*ung 3 java primitive operation
我正在阅读 java OCA 认证文档。一些原始的操作行为对我来说似乎很奇怪。
这是说,所有的byte,short和char值会自动扩大到int作为操作数的算术运算时。这是完美的逻辑。但是当我们将这个操作数设为 final 时就会出现混乱。
此代码不会编译(逻辑)
short s1 = 10 ;
short s2 = 20 ;
short sum = s1 + s2;
Run Code Online (Sandbox Code Playgroud)
但是这个会编译
final short s1 = 10 ;
final short s2 = 20 ;
short sum = s1 + s2;
Run Code Online (Sandbox Code Playgroud)
为什么这会编译成功?关键字的什么属性final使这段代码编译?
它生成 s1 和 s2 编译时常量表达式,因此加法是由编译器完成的,而不是在运行时完成,因此代码等价于
short sum = 30;
Run Code Online (Sandbox Code Playgroud)
因此,编译器能够知道分配给的值sum小到足以放入一个 short 中,从而进行编译。
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |