我的一位同事向我提出这个问题,我有些困惑。
int i = 123456;
short x = 12;
声明
x += i;
然后编译好
x = x + i;
不
Java在这做什么?
答案 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))
,其中T
是E1
的类型,但E1
仅被评估一次。
答案 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;
除非x
是int
,否则无法编译。