我的一个同事问我这个问题,我有点困惑。
int i = 123456;
short x = 12;
该声明
x += i;
但是编译得很好
x = x + i;
没有
Java 在这里做什么?
我的一个同事问我这个问题,我有点困惑。
int i = 123456;
short x = 12;
该声明
x += i;
但是编译得很好
x = x + i;
没有
Java 在这里做什么?
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 + i
is of type int
)。
形式的复合赋值表达式
E1 op= E2
等价于E1 = (T)((E1) op (E2))
,其中T
是 的类型E1
,除了E1
只计算一次。
整数类型(int、short、char 和 byte)的+
运算符总是返回一个 int 作为结果。
您可以通过以下代码看到:
//char x = 0;
//short x = 0;
//byte x = 0;
int x = 0;
x = x + x;
除非x
是int
.
int
除非您以其他方式特别转换它们,否则数字将被视为。因此,在第二个语句中,当您使用文字数字而不是变量时,它不会自动将其转换为适当的类型。
x = x + (short)1;
...应该管用。