java 扩大最终变量
java widening final variable
我正在阅读 java OCA 认证文档。
一些原始的操作行为对我来说似乎很奇怪。
据说所有byte
、short
和char
值在用作算术运算的操作数时会自动扩大到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
的什么 属性 使这段代码编译通过?
它使 s1 和 s2 成为编译时常量表达式,因此加法是由编译器完成的,而不是在运行时完成的,因此代码等同于
short sum = 30;
编译器因此能够知道分配给 sum
的值足够小以适合一个 short,因此它可以编译。
我正在阅读 java OCA 认证文档。 一些原始的操作行为对我来说似乎很奇怪。
据说所有byte
、short
和char
值在用作算术运算的操作数时会自动扩大到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
的什么 属性 使这段代码编译通过?
它使 s1 和 s2 成为编译时常量表达式,因此加法是由编译器完成的,而不是在运行时完成的,因此代码等同于
short sum = 30;
编译器因此能够知道分配给 sum
的值足够小以适合一个 short,因此它可以编译。