كيف يعمل حلقة for-each في Java فعليًا؟ شرح مفصل مع أمثلة
```html
مرحباً بالجميع! بدأت تعلم جافا مؤخراً وواجهت حلقة for-each. يبدو كل شيء واضحاً: for (int x : numbers) { ... } — ببساطة تمر عبر عناصر المصفوفة أو المجموعة. ولكن عندما بدأت بالتعمق أكثر، ظهرت الكثير من الأسئلة.
على سبيل المثال، كتبت هذا الكود:
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
for (String s : list) {
if (s.equals("B")) {
list.remove(s); // ConcurrentModificationException!
}
}
وحصلت على ConcurrentModificationException. لماذا؟ بينما في الحلقة العادية for (int i = 0; i < list.size(); i++) لا يحدث هذا.
مثال آخر — حاولت تغيير عناصر المصفوفة عبر for-each:
int[] arr = {1, 2, 3};
for (int x : arr) {
x = x * 2; // لا يعمل! المصفوفة لم تتغير
}
لماذا لا يشير x إلى عنصر المصفوفة؟ وماذا يحدث "تحت الغطاء"؟ هل يمكن لـ for-each العمل مع أي أنواع بيانات؟ كيف يعمل المترجم
```