سؤال

وإذا كان لدي متغير عضو مثل هذا (أعلن في الجسم من فئة)

private Dot[] dots=new Dot[numDots];

وأنا حلقة من خلال جميع أعضاء هذه المجموعة، و:

1) تمرير كل كائن نقطة على وظيفة من فئة أخرى، منها:

2) يمررها إلى وظيفة أخرى من فئة 3RD، إذا تم استيفاء بعض الشروط

و3) والطبقة 3RD تغيير بعض خصائص الكائن دوت

وبعد ذلك عندما يتم إرجاع هذا الكائن إلى فئة / الأم الأصلية، قد احتفظت تلك التغييرات خصائصه؟ أم أنه يعامل مثل متغير محلي بواسطة وظائف 2ND / 3RD؟

هل كانت مفيدة؟

المحلول

نعم، يتم الاحتفاظ تغييرات على خصائص. جاوة هو 100٪ تمرير كل قيمة، ومع ذلك، عند تمرير كائن، "القيمة" مرت هي حقا مؤشر إلى كائن. وهكذا، عند تغيير كائن في طريقة، وكنت تغيير الكائن الفعلي الذي صدر في.

وهذا هو، إذا كان لديك الأسلوب التالي، ثم طريقة الدعوة ستشهد تغييرات:

private void updateMyDot(final Dot aDot) {
  aDot.dotColor = new Color(255,255,255);
}

ولكن اذا كنت تفعل ما يلي، ثم طريقة الدعوة سوف على لا عرض التغييرات.

private void updateMyDot(/* not final */ Dot aDot) {
  aDot = new Dot();
  aDot.dotColor = new Color(255,255,255);
}

في المثال الثاني، المتصل سوف على لا عرض أي تغييرات، وسوف لا ترى الكائن Dot تم إنشاؤه حديثا.

نصائح أخرى

يتم تمرير

والأجسام التي كتبها [<ديل> مرجع قيمة حيث القيمة هي إشارة ] (الأشياء التي ترث من وجوه)، القيم البدائية (الباحث، منذ فترة طويلة، مزدوجة، الخ ) يتم تمريرها من حيث القيمة.

وهذا يعني أنه عندما يتم تمرير بدائية من المتصل إلى طريقة نسخها، في حين مع كائن من [<م> قيمة ] يتم تمرير الإشارة.

والذي بدوره يعني أنه عندما يتم تحور كائن بطريقة المتصل يرى هذه التغييرات لأنه يحتوي على إشارة إلى نفس الكائن.

وعلى العكس من ذلك عندما يتحور طريقة بدائية المتصل لا ترى التغييرات كأسلوب هو العمل على نسخة منه.

[سبب التعديلات]

إذا كان جافا تمرير بالرجوع ثم هل يمكن قيام بذلك:

Object x;

x = new Integer(42);
foo(x);
System.out.println(x.getClass()); // pass by reference would have it print out java.lang.Float

وحيث يتم تعريف فو على النحو التالي:

void foo(Object o)
{
   o = new Float(43);
}

ومنذ جافا يمر يسمح بإشارة o = new Float(43); القيمة - ولكن القيمة في المتصل تبقى كما new Integer(42);

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top