将 int 添加到 short 中

15

我的同事向我提出了这个问题,让我有些困惑。

int i = 123456;
short x = 12;

这个语句

x += i;

编译没有问题,然而

x = x + i;

这里Java在做什么?


你正在尝试将int加到short上。但是,a = b!= b = a。 - Roman C
你实际上是将一个整数添加到短整型中。 - Steve Kuo
3
试试这个有趣的代码:char ch = '0'; ch *= 1.2;现在ch'8';) - Peter Lawrey
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。它不会自动转换为 short,因此会导致错误(x + i 是类型为 int 的)。
形如 E1 op= E2 的复合赋值表达式等同于 E1 = (T)((E1) op (E2)),其中 TE1 的类型,但 E1 只被计算一次。

- JLS §15.26.2


4
整型类型(int、short、char和byte)的+运算符始终返回int类型作为结果。
您可以通过以下代码看到这一点:
//char x = 0;
//short x = 0;
//byte x = 0;
int x = 0;
x = x + x;

除非x是一个int,否则它将无法编译。


2

数字默认为int类型,除非您明确将其转换为其他类型。因此,在第二个语句中,当您使用字面数字而不是变量时,它不会自动将其转换为适当的类型。

x = x + (short)1;

应该可以正常工作。


我写错了方程。我更新了我的问题。请看x = x + i - Em Ae
好的,那么为什么 x = x + x; 不起作用呢?问题不在数字1上,而是在返回int类型的+运算符上。 - lleite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接