short plus short是一个int

Sim*_*mon 2 java

我有三个短变量.当我将两个加在一起并将结果分配给第三个时,eclipse告诉我,我需要将其转换为简短的!

short sFirst, sSecond, sThird;

sFirst = 10;
sSecond = 20;
sThird = sFirst + sSecond;
Run Code Online (Sandbox Code Playgroud)

Hovever,当我做一个简单的任务,然后是增量赋值时,一切都很好.

short sFirst, sSecond, sThird;

sFirst = 10;
sSecond = 20;
sThird = sFirst;
sThird += sSecond;
Run Code Online (Sandbox Code Playgroud)

为什么是这样 ?

Ste*_*n C 7

JLS(§15.8.2)说:

"二进制+运算符在应用于两个数值类型的操作数时执行加法,产生操作数的总和."

"对操作数执行二进制数字推广(第5.6.2节)."

这意味着表达式的操作数将转换为int.因此添加将添加intint.

"数字操作数上的加法表达式的类型是其操作数的提升类型."

在你的情况下,int.


我不会推测为什么这样做.但是,这不是偶然的.如果查看JVM规范中定义的字节码指令集,您将看到有和,和...的算术指令int,但不是较小的整数类型.longfloatdouble