Avatar ·

Warum array[idx++] += "a" in Java 8 idx einmal und in Java 9+ zweimal erhöht?

Hallo zusammen! Ich bin auf ein seltsames Verhalten von Java gestoßen, wenn ich den zusammengesetzten Zuweisungsoperator mit Postfix-Inkrement in einem Array verwende. Ich habe diesen einfachen Code: ```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]); } } ``` In Java 8 gibt dieser Code aus: ``` idx = 1 array[0] = xa array[1] = y ``` Das heißt, idx wird einmal erhöht und der String "a" wird zu array[0] hinzugefügt. Aber in Java 9 und 10 erhalte ich: ``` idx = 2 array[0] = x array[1] = ya ``` Das heißt, idx wird zweimal erhöht und "a" wird zu array[1] hinzugefügt! Ich verstehe, dass dies mit Änderungen im javac-Compiler zwischen den Versionen zusammenhängt. Aber warum passiert das? Ist das ein Bug oder ein Feature? Wie schreibt man solchen Code richtig, damit er überall gleich funktioniert?