2

例如:

int a = 10;
a += 1.5;

这运行完美,但是

a = a+1.5;

这个作业说Type mismatch: cannot convert from double to int+= operator所以我的问题是:和之间有什么区别= operator。为什么第一个任务没有说什么,但第二个会。请给我解释一下。只是我想知道我是否可以将第一个作业用于所有地方。

4

4 回答 4

9
int a = 10;
a += 1.5;

相当于:

int a = 10;
a = (int) (a + 1.5);

一般来说:

x += y;相当于x = (type of x) (x + y);


15.26.2。复合赋值运算符

于 2013-02-27T08:55:26.153 回答
9

Java 语言规范部分 15.26.2

形式的复合赋值表达式E1 op= E2等价于E1 = (T) ((E1) op (E2)),其中T是 的类型E1,除了E1只计算一次。

所以最重要的区别(就为什么第二个版本不编译而言)是隐式转换回原始变量的类型。

于 2013-02-27T08:56:19.883 回答
2

检查此链接

int a = 10;
a += 1.5;

将被视为

int a=10;
a=(int)(a+1.5);

正如您可以在此链接表达式中找到的

于 2013-02-27T09:02:38.880 回答
1

的情况下

a += 1.5;

隐式自动装箱完成

和这里一样

a = a+1.5;

您正在将 int 变量显式添加到 float/double 变量

所以要纠正它

a = a+(int)1.5;

或者

a = (int) (a+1.5);
于 2013-02-27T08:57:00.797 回答