15

我的一个同事问我这个问题,我有点困惑。

int i = 123456;
short x = 12;

该声明

x += i;

但是编译得很好

x = x + i;

没有

Java 在这里做什么?

4

3 回答 3

20
int i = 123456;
short x = 12;
x += i;

实际上是

int i = 123456;
short x = 12;
x = (short)(x + i);

x = x + i简直就是x = x + i。它不会自动转换为 a short,因此会导致错误(x + iis of type int)。


形式的复合赋值表达式E1 op= E2等价于E1 = (T)((E1) op (E2)),其中T是 的类型E1,除了E1只计算一次。

- JLS §15.26.2

于 2012-09-21T20:27:13.483 回答
3

整数类型(int、short、char 和 byte)的+运算符总是返回一个 int 作为结果。

您可以通过以下代码看到:

//char x = 0;
//short x = 0;
//byte x = 0;
int x = 0;
x = x + x;

除非xint.

于 2012-09-21T20:29:00.117 回答
2

int除非您以其他方式特别转换它们,否则数字将被视为。因此,在第二个语句中,当您使用文字数字而不是变量时,它不会自动将其转换为适当的类型。

x = x + (short)1;

...应该管用。

于 2012-09-21T20:25:51.353 回答