+ = b真的等于a = a + b吗?

时间:2013-11-07 21:22:57

标签: java

请考虑以下事项:

int a = 1;
double b = 0.5;
System.out.println(a += b);    // case x
System.out.println(a = a + b); // case y

显而易见的是,上面甚至没有编译 - 由于“不兼容的类型”,情况y将失败。如果我自己运行case x,它只会返回一个。

这里发生了什么?简写操作符(+ =)“捕获”失败的赋值并且默认只返回lhand值吗?如果是这样,那么声称a + = b等于a = a + b是否真的是正确的,这在教程中很常见?

2 个答案:

答案 0 :(得分:5)

根据Java语言规范第15.26.2节,复合赋值运算符将隐式转换插入到左侧操作数的类型中:

  

二进制操作的结果将转换为左手的类型   变量,受到值集转换(第5.113节)到适当的标准值集(不是扩展指数值集),转换结果存储在变量中。

作业a = a + b需要演员阵容相同:

a = (int)(a + b);

答案 1 :(得分:0)

你有一个double和int值:

a += b is equivalent to a = (int)(a + b);
a = a + b is equivalent to a = a + b;

在后者中你无法编译,因为你试图在没有强制转换的情况下向int添加double。 a + = b为你做演员。