قاعدة Java: الوسائط تُمرَّر بالقيمة دائمًا، أي Pass-by-Value. مع int، ننسخ العدد من Argument إلى Parameter، وليس المتغير المحلي نفسه.
القيمة تننسخ إلى Parameter
Primitive Arguments & Pass-by-Value
Primitive Arguments & Pass-by-Value
مثال increase: عندما number يساوي 10 ونستدعي increase(number)، يبدأ Parameter المسمى x بقيمة 10. تنفيذ x = x + 2 يجعله 12 داخل Method.
ما الذي لا يتغير
number في main يبقى 10 ما لم نُسند إليه قيمة جديدة. تجاهل القيمة المعادة من increase لا يغيّر number.
كيف نستفيد من return: number = increase(number); تحفظ القيمة المعادة في متغير main. أما println(increase(number)) فتطبع القيمة المعادة فقط. هذه نتيجة الإسناد أو الطباعة، وليست تمريرًا بالمرجع.
تتبّع الكود سطرًا سطرًا
public class Increment {
public static void main(String[] args) {
int number = 10;
System.out.println("number = " + number);
increase(number);
System.out.println("number = " + number);
System.out.println("number = " + increase(number));
}
public static int increase(int x) {
x = x + 2;
return x;
}
}خلّنا نمشي على المثال
- أول println تطبع number = 10.
- تستدعي main الدالة increase، فيصبح x داخلها 12 وتُرجع 12، لكن main تتجاهل النتيجة.
- ثاني println ما زالت تطبع number = 10.
- الطباعة الأخيرة تستعمل القيمة المعادة فتظهر number = 12. فعّل حفظ return للمقارنة.
تغيير x لا يغيّر number تلقائيًا. تتبع كل متغير حسب Method التي ينتمي إليها، وانتبه أين تُستخدم القيمة المعادة.
غيّر القيم وشوف النتيجة
غيّر number، ثم فعّل حفظ القيمة المعادة. توقّع الطباعات الثلاث قبل قراءة Console.
محاكاة لهذا المثال المحدد، وليست تشغيلًا لكود Java عشوائي.