short plus short是一个int

时间:2013-08-07 10:19:08

标签: java

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

short sFirst, sSecond, sThird;

sFirst = 10;
sSecond = 20;
sThird = sFirst + sSecond;

Hovever,当我做一个简单的作业,然后进行增量作业时,一切都很好。

short sFirst, sSecond, sThird;

sFirst = 10;
sSecond = 20;
sThird = sFirst;
sThird += sSecond;

为什么会这样?

2 个答案:

答案 0 :(得分:6)

JLS(§15.8.2)说:

  

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

     

“对操作数(§5.6.2)执行二进制数字提升。”

这意味着表达式的操作数将转换为int。因此,添加会向int添加int

  

“数字操作数上的加法表达式的类型是其操作数的提升类型。”

在您的情况下,int


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

答案 1 :(得分:1)

此行为在Java Language Specification

中精确指定

问题为什么如此指定的问题的答案只是推测而不是真正的答案。在Oli Charlesworth的支持下,我的“有根据的猜测”是因为等效语义适用于C和其他类似语言。 C中的语义是这样的(再次是“有根据的猜测”),因为它们允许编译器生成最优的代码。