将int添加到short

Em *_* Ae 11 java

我的一位同事向我提出这个问题,我有点困惑.

int i = 123456;
short x = 12;
Run Code Online (Sandbox Code Playgroud)

该声明

x += i;
Run Code Online (Sandbox Code Playgroud)

编译但是很好

x = x + i;
Run Code Online (Sandbox Code Playgroud)

Java在这做什么?

ars*_*jii 19

int i = 123456;
short x = 12;
x += i;
Run Code Online (Sandbox Code Playgroud)

实际上是

int i = 123456;
short x = 12;
x = (short)(x + i);
Run Code Online (Sandbox Code Playgroud)

虽然x = x + i很简单x = x + i.它不会自动转换为a short并因此导致错误(x + i属于类型int).


除了仅计算一次之外,表单的复合赋值表达式E1 op= E2等效于E1 = (T)((E1) op (E2)),where T的类型.E1E1

- JLS§15.26.2