Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java最终变量_Java_Primitive_Operation - Fatal编程技术网

java最终变量

java最终变量,java,primitive,operation,Java,Primitive,Operation,我正在阅读JavaOCA认证文档。 一些原始的操作行为对我来说真的很奇怪 据说,当用作算术运算的操作数时,所有的字节、短和字符值都会自动扩大到int。这完全符合逻辑。但是,当我们将这个操作数设为最终值时,就会出现混乱 此代码不会编译(逻辑) 但是这个会编译的 final short s1 = 10 ; final short s2 = 20 ; short sum = s1 + s2; 为什么这会成功编译?关键字final的什么属性使此代码可编译 它生成s1和s2编译时常量表达式

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

据说,当用作算术运算的操作数时,所有的
字节
字符
值都会自动扩大到
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;