我的同事向我提出了这个问题,让我有些困惑。
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
。它不会自动转换为 short
,因此会导致错误(x + i
是类型为 int
的)。
E1 op= E2
的复合赋值表达式等同于 E1 = (T)((E1) op (E2))
,其中 T
是 E1
的类型,但 E1
只被计算一次。
+
运算符始终返回int类型作为结果。//char x = 0;
//short x = 0;
//byte x = 0;
int x = 0;
x = x + x;
除非x
是一个int
,否则它将无法编译。
数字默认为int
类型,除非您明确将其转换为其他类型。因此,在第二个语句中,当您使用字面数字而不是变量时,它不会自动将其转换为适当的类型。
x = x + (short)1;
应该可以正常工作。
x = x + i
。 - Em Ae
char ch = '0'; ch *= 1.2;
现在ch
是'8'
;) - Peter Lawrey