为什么 array[idx++] += "a" 在 Java 8 中递增 idx 一次,而在 Java 9+ 中递增两次?
大家好!我遇到了 Java 中使用复合赋值运算符和数组后置递增时的奇怪行为。
我有一个简单的代码:
```java
public class Test {
public static void main(String[] args) {
String[] array = {"x", "y", "z"};
int idx = 0;
array[idx++] += "a";
System.out.println("idx = " + idx);
System.out.println("array[0] = " + array[0]);
System.out.println("array[1] = " + array[1]);
}
}
```
在 Java 8 中,这段代码输出:
```
idx = 1
array[0] = xa
array[1] = y
```
也就是说,idx 递增了一次,字符串 "a" 被添加到 array[0]。
但在 Java 9 和 10 中,我得到:
```
idx = 2
array[0] = x
array[1] = ya
```
也就是说,idx 递增了两次,"a" 被添加到了 array[1]!
我知道这与不同版本之间 javac 编译器的变化有关。但为什么会这样?这是 bug 还是 feature?如何正确编写这样的代码,使其在所有版本中行为一致?