关于java:将int添加到short

Adding int to short

本问题已经有最佳答案,请猛点这里访问。

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

1
2
int i = 123456;
short x = 12;

声明

1
x += i;

不过汇编得很好

1
x = x + i;

Java在这里做什么?


1
2
3
int i = 123456;
short x = 12;
x += i;

实际上是

1
2
3
int i = 123456;
short x = 12;
x = (short)(x + i);

x = x + i只是x = x + i而已。它不会自动转换为short,因此会导致错误(x + iint类型)。

A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T)((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

- JLS §15.26.2


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

1
x = x + (short)1;

…应该工作。


整型(int、short、char和byte)的+运算符始终返回int作为结果。

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

1
2
3
4
5
//char x = 0;
//short x = 0;
//byte x = 0;
int x = 0;
x = x + x;

它不会编译,除非xint