例如:
int a = 10;
a += 1.5;
这运行完美,但是
a = a+1.5;
这个作业说Type mismatch: cannot convert from double to int
。+= operator
所以我的问题是:和之间有什么区别= operator
。为什么第一个任务没有说什么,但第二个会。请给我解释一下。只是我想知道我是否可以将第一个作业用于所有地方。
int a = 10;
a += 1.5;
相当于:
int a = 10;
a = (int) (a + 1.5);
一般来说:
x += y;
相当于x = (type of x) (x + y);
形式的复合赋值表达式
E1 op= E2
等价于E1 = (T) ((E1) op (E2))
,其中T
是 的类型E1
,除了E1
只计算一次。
所以最重要的区别(就为什么第二个版本不编译而言)是隐式转换回原始变量的类型。
的情况下
a += 1.5;
隐式自动装箱完成
和这里一样
a = a+1.5;
您正在将 int 变量显式添加到 float/double 变量
所以要纠正它
a = a+(int)1.5;
或者
a = (int) (a+1.5);