اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

في Java يتم تمرير كل معلمة ليست من النوع البدائي (int ، long ، byte ، char ، boolean ...) كمرجع لهذا الكائن , على سبيل المثال

public static void test(List<Integer> list){// أنشأت دالة تستقبل معامل والمعامل عبارة عن مرجع لكائن من نوع List ونوع العناصر التي تستقبلها القائمة هي أعداد صحيحة
 list.add(3);// وظيفة الدالة فقط اضافة عنصر اليها وقيمته 3
} 

public static void main(String[] args){
   List<Integer> list1 = new LinkedList<>();//انشاء كائن من LinkedList تقبل عناصر من نوع اعداد صحيحة
   list1.add(1);// اضافةعنصر الى القيمة قيمته 1
   list1.add(2);// ضافةعنصر الى القيمة قيمته 2
   test(list1);// تمرير المرجع للكائن LinkedList الذي تم انشائه الى الدالة التي قمت بانشائها والتي اسمها test
   Iterator it = list1.iterator();// أنشأت كائن من iterator للمرور على عناصر LinkedList
   while(it.hasNext()){// حلقة تكرار تعمل طالما القائمة تمتلك عنصر آخر
      System.out.println(it.next());// طباعة قيمة العنصر
   }
}

في المثال السابق قمت بانشاء دالة تستقبل معامل واحد وهو من نوع List , يمكنك متابعة الشرح في الكود , نتيجة الكود سوف تكون 

1
2
3

 

  • 1
نشر

بالإضافة إلى إجابة محمد فإن عند عمل تعديل على القائمة في الدالة ستلاحظ  أن التعديل قد إحدث أيضًا على Linked list الأصلية بخارج الدالة وذلك لأن على الرغم أن من المفترض Java أنها دائمًا ما تقوم بالتمرير بالقيم (pass by value) ألا أن هناك مشكلة وهي أن تلك القيمة في حالة الكائنات تكون عبارة عن pointer وبالتالي أي تغيير يحدث يطول الكائن الأصلي, إن كنت تريد تمرير الLinked list دون المساس بالقائمة الأصلية يمكنك إذا بدلًا من تمريرها تمرير نسخةً منها عبر الدالة  clone كما  في الشفرة البرمجية التالية 

LinkedList temp_list = (LinkedList) list1.clone();
test(temp_list);

بهذه الطريقة نضمن أن لا يتم حدوث أي تغيير على القائمة الأصلية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...