Avatar ·

¿Por qué array[idx++] += "a" incrementa idx una vez en Java 8 y dos veces en Java 9+?

¡Hola a todos! Me encontré con un comportamiento extraño de Java al usar el operador de asignación compuesta con incremento postfijo en un array. Tengo un código simple: ```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]); } } ``` En Java 8 este código imprime: ``` idx = 1 array[0] = xa array[1] = y ``` Es decir, idx se incrementa una vez, y la cadena "a" se agrega a array[0]. Pero en Java 9 y 10 obtengo: ``` idx = 2 array[0] = x array[1] = ya ``` ¡Es decir, idx se incrementa dos veces, y "a" se agrega a array[1]! Entiendo que esto está relacionado con cambios en el compilador javac entre versiones. Pero ¿por qué sucede esto? ¿Es un bug o una feature? ¿Cómo escribir correctamente este código para que funcione igual en todas?