الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لماذا تتعدل قيمة الـ Object عند تمريرها كـ parameter، مع أن الجافا pass-by-value

بدأه Eng.Fouad في 20 أغسطس 2011 · 1 رد · 716 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

المعروف في الجافا بأنها تقوم بتمرير القيم فقط pass-by-value وليس في مثل بعض اللغات الأخرى pass-by-reference

لكن في المثال التالي:

public class test
{
	public static void main(String[] args)
	{
		int temp = 1;
		editPrimitive(temp);
		System.out.println(temp); // prints 1

		int[] temp_array = {1};
		editObject(temp_array);
		System.out.println(temp_array[0]); // prints 2
	}
	public static void editPrimitive(int n)
	{
		n = 2;
	}
	public static void editObject(int[] n)
	{
		n[0] = 2;
	}
}

عندما قمنا بتمرير primitive لم تتعدل القيمة، وهذا متوقع لأن التمرير تم بالقيمة pass-by-value، ولكن عندما قمنا بتمرير الـ array وهو object تعدلت القيمة!! أليس صحيحاً أن الجافا لا يمرر المرجع pass-by-reference؟

أتمنى أن أجد إجابة مرضية لتساؤلاتي، وشكراً

597657.png
#2

هناك فرق بين Pass By Reference و Pass Reference By Value .

في الأول Pass By Reference سوف ترسل مؤشر للدالة وتستطيع الدالة تغيير القيمه أو تغيير المؤشر وجعله يؤشر لمكان أخر (هذا في سي++ ، جافا لا يوجد بها هذا النوع).

الثاني Pass Reference By Value سوف ترسل المؤشر بالقيمة وتستطيع الدالة تغيير القيمة ولا تستطيع تغيير المؤشر وجعله يؤشر لمكان أخر..

في مثالك، تم ارسال مؤشر المصفوفة بالقيمة Pass Reference By Value،، لن تستطيع تغيير المصفوفه وتجعلها داخل الدالة تؤشر لمصفوفه أخرى .. ولكنك تستطيع تغيير القيم بداخلها لأن لديك مؤشر لها (نفس الأمر مع الكائنات يرسل مؤشرها بالقيمة ولن تستطيع جعل الكائن يؤشر لكائن أخر، ولكنك تستطيع تغيير قيمة الكائن باستخدام دوال الset اذا كانت هناك دوال كهذه في الكائن) والمصفوفه هي كائن أيضاً في جافا.

Java Always passing by Value

بالتوفيق،

2

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

مواضيع مشابهة