java最终变量
我正在阅读JavaOCA认证文档。 一些原始的操作行为对我来说真的很奇怪 据说,当用作算术运算的操作数时,所有的java最终变量,java,primitive,operation,Java,Primitive,Operation,我正在阅读JavaOCA认证文档。 一些原始的操作行为对我来说真的很奇怪 据说,当用作算术运算的操作数时,所有的字节、短和字符值都会自动扩大到int。这完全符合逻辑。但是,当我们将这个操作数设为最终值时,就会出现混乱 此代码不会编译(逻辑) 但是这个会编译的 final short s1 = 10 ; final short s2 = 20 ; short sum = s1 + s2; 为什么这会成功编译?关键字final的什么属性使此代码可编译 它生成s1和s2编译时常量表达式
字节
、短
和字符
值都会自动扩大到int
。这完全符合逻辑。但是,当我们将这个操作数设为最终值时,就会出现混乱
此代码不会编译(逻辑)
但是这个会编译的
final short s1 = 10 ;
final short s2 = 20 ;
short sum = s1 + s2;
为什么这会成功编译?关键字
final
的什么属性使此代码可编译 它生成s1和s2编译时常量表达式,因此加法由编译器完成,而不是在运行时完成,因此代码相当于
short sum = 30;
因此,编译器能够知道分配给
sum
的值足够小,可以放入一个简短的语句中,因此它进行编译。关键字final的什么属性使此代码能够编译?没有什么。您正在进行编译器优化。完成亲爱的JB Niezet。但我认为数据范围的精确性是有用的。Nethermind i删除ANWSERT编译器因此能够知道分配给sum的值足够小,可以放入一个短字符串中。
short sum = 30;