将int添加到short

时间:2012-09-21 20:21:59

标签: java

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

int i = 123456;
short x = 12;

声明

x += i;

然后编译好

x = x + i;

Java在这做什么?

3 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:2)

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

x = x + (short)1;

......应该有用。

答案 2 :(得分:1)

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

您可以使用以下代码查看:

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

除非xint,否则无法编译。