请考虑以下事项:
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是否真的是正确的,这在教程中很常见?
答案 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为你做演员。