Avatar ·

هل تقوم Java بتمرير المعاملات بالقيمة أم بالمرجع؟ نفضح الأسطورة الشائعة

مرحبًا بالجميع! أنا مطور Java مبتدئ، وهناك سؤال أساسي يربكني باستمرار. يقول الكثيرون إن Java تنقل الكائنات (objects) بالمرجع (by reference) والأنواع البدائية (primitives) بالقيمة (by value). لكنني قرأت أن Java في الواقع تنقل جميع المعاملات (parameters) بالقيمة (by value). حاولت كتابة كود صغير لفهم الأمر، لكنه زادني حيرة. إليك المثال: ```java public class Main { public static void main(String[] args) { int x = 5; changePrimitive(x); System.out.println("After changePrimitive: " + x); // الإخراج: 5 StringBuilder sb = new StringBuilder("Hello"); changeObject(sb); System.out.println("After changeObject: " + sb); // الإخراج: Hello World } public static void changePrimitive(int value) { value = 10; } public static void changeObject(StringBuilder builder) { builder.append(" World"); } } ``` في الحالة الأولى، لم يتغير النوع البدائي `int` — وهذا مفهوم، لأنه تم تمريره بالقيمة (by value).