s = s + s和s + = s之间的差异

Pat*_*ick 9 java operators short

我做了一点测试来操纵a short,我遇到了编译问题.以下代码编译:

short s = 1;
s += s;
Run Code Online (Sandbox Code Playgroud)

虽然这个没有:

short s = 1;
s = s + s; //Cannot convert from int to short
Run Code Online (Sandbox Code Playgroud)

我已经阅读过shorts自动升级int,但这两个代码有什么区别?

rge*_*man 17

你是对的,short被提升为ints.这在二元运算符的求值期间发生+,并且它被称为二进制数字提升.

但是,使用复合赋值运算符可以有效地擦除它+=. JLS第15.26.2节规定:

形式E1 OP = E2中的化合物,赋值表达式等价于E1 =(T)((E1)OP(E2)),其中T是E1的类型,不同的是E1只计算一次.

也就是说,它相当于回归short.