我有三个短变量。 当我将两个加在一起并将结果分配给第三个时,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;
为什么会这样?
答案 0 :(得分:6)
JLS(§15.8.2)说:
“二进制+运算符在应用于两个数值类型的操作数时执行加法,产生操作数的总和。”
“对操作数(§5.6.2)执行二进制数字提升。”
这意味着表达式的操作数将转换为int
。因此,添加会向int
添加int
。
“数字操作数上的加法表达式的类型是其操作数的提升类型。”
在您的情况下,int
。
我不会推测为什么这样做。但是,这不是偶然的。如果查看JVM规范中定义的字节码指令集,您将看到int
,long
,float
和double
的算术指令...但不适用于较小的整数类型。
答案 1 :(得分:1)
此行为在Java Language Specification。
中精确指定问题为什么如此指定的问题的答案只是推测而不是真正的答案。在Oli Charlesworth的支持下,我的“有根据的猜测”是因为等效语义适用于C和其他类似语言。 C中的语义是这样的(再次是“有根据的猜测”),因为它们允许编译器生成最优的代码。