Avatar ·

كيف يعمل حلقة 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 العمل مع أي أنواع بيانات؟ كيف يعمل المترجم ```