Avatar ·

لماذا `array[idx++] += "a"` يزيد `idx` مرة واحدة في Java 8 ومرتين في Java 9+؟

مرحباً بالجميع! واجهت سلوكاً غريباً في Java عند استخدام عامل الإسناد المركب (compound assignment operator) مع الزيادة اللاحقة (postfix increment) في مصفوفة.\n\nلدي كود بسيط:\n\n```java\npublic class Test {\n public static void main(String[] args) {\n String[] array = {"x", "y", "z"};\n int idx = 0;\n array[idx++] += "a";\n System.out.println("idx = " + idx);\n System.out.println("array[0] = " + array[0]);\n System.out.println("array[1] = " + array[1]);\n }\n}\n```\n\nفي Java 8، هذا الكود يطبع:\n```\nidx = 1\narray[0] = xa\narray[1] = y\n```\n\nأي أن `idx` يزيد مرة واحدة، ويتم إضافة السلسلة "a" إلى `array[0]`.\n\nلكن في Java 9 و10 أحصل على:\n```\nidx = 2\narray[0] = x\narray[1] = ya\n```\n\nأي أن `idx` يزيد مرتين، ويتم إضافة "a" إلى `array[1]`.