عندما يتم تمرير كائن كمعلمة إلى طريقة ما ، يمكن لهذه الطريقة تغيير خصائص الكائن وإرجاع النتيجة التي تم تغييرها. فهل هو تمريرة قيمة أم تمريرة مرجعية هنا؟
الإجابة: إنه نقل القيمة. لغة برمجة Java تمر فقط المعلمات مع القيم. عندما يتم تمرير مثيل كائن إلى طريقة كمعلمة ، فإن قيمة المعلمة هي نسخة من مرجع الكائن. عند الإشارة إلى نفس الكائن ، يمكن تغيير محتوى الكائن في الطريقة المسمى ، لكن مرجع الكائن (وليس نسخة من المرجع) لن يتغير أبدًا.
معلمات Java ، سواء كانت أنواعًا بدائية أو أنواع مرجعية ، تمرر جميع النسخ (هناك قول آخر هو تمرير القيم ، ولكن من الأفضل أن نفهم أن نسخ تمرير ، وعادة ما تكون القيم المرضية بالنسبة للعناوين المارة).
إذا كان نوع المعلمة هو نوع بدائي ، فإن تمريره هو نسخة من هذه المعلمة ، أي قيمة المعلمة الأصلية ، وهي نفس القيمة التي تم تمريرها من قبل. إذا تم تغيير قيمة النسخة في الوظيفة ، فلن يتم تغيير القيمة الأصلية.
إذا كان نوع المعلمة هو نوع مرجع ، فسيتم تمرير نسخة من المعلمة المرجعية هذه ، وتخزن هذه النسخة عنوان المعلمة. إذا لم يتم تغيير عنوان هذه النسخة في الوظيفة ، ولكن تم تغيير القيمة في العنوان ، فإن التغيير داخل الوظيفة سيؤثر على المعلمات التي تم تمريرها. إذا تم تغيير عنوان النسخة في الوظيفة ، مثل جديد ، فإن النسخة تشير إلى عنوان جديد. في هذا الوقت ، لا تزال المعلمة الواردة تشير إلى العنوان الأصلي ، وبالتالي لن يتم تغيير قيمة المعلمة.
مثال:
الفئة العامة paramtest {public static void main (string [] args) { / ** * test 1: الأساليب لا يمكن تعديل المعلمات الرقمية * / system.out.println ("Testing TripleValue:") ؛ في المئة مزدوجة = 10 ؛ System.out.println ("قبل: النسبة المئوية =" + في المئة) ؛ Triplevalue (في المئة) ؛ System.out.println ("بعد: النسبة المئوية =" + في المئة) ؛ /** * الاختبار 2: يمكن أن تغير الأساليب حالة معلمات الكائن */system.out.println ("/ntesting triplesalary:") ؛ الموظف هاري = موظف جديد ("هاري" ، 50000) ؛ System.out.println ("قبل: الراتب =" + harry.getSalary ()) ؛ ثلاثية (هاري) ؛ System.out.println ("بعد: الراتب =" + harry.getSalary ()) ؛ /** * الاختبار 3: لا يمكن للأساليب إرفاق كائنات جديدة إلى معلمات الكائن */system.out.println ("/ntesting swap:") ؛ الموظف أ = موظف جديد ("أليس" ، 70000) ؛ الموظف ب = موظف جديد ("بوب" ، 60000) ؛ System.out.println ("قبل: a =" + a.getName ()) ؛ system.out.println ("stire: b =" + b.getName ()) ؛ مبادلة (أ ، ب) ؛ System.out.println ("بعد: a =" + a.getName ()) ؛ system.out.println ("بعد: b =" + b.getName ()) ؛ } مبادلة الفراغ الثابتة الخاصة (الموظف X ، الموظف y) {temp kefferey = x ؛ x = y ؛ y = درجة الحرارة ؛ system.out.println ("نهاية الطريقة: x =" + x.getName ()) ؛ system.out.println ("نهاية الطريقة: y =" + y.getName ()) ؛ } private static void triplesalary (الموظف x) {x.raisesalary (200) ؛ system.out.println ("نهاية الطريقة: الراتب =" + x.getSalary ()) ؛ } private static void triplevalue (double x) {x = 3*x ؛ system.out.println ("نهاية الطريقة x ="+x) ؛ }}نتائج إظهار:
اختبار ثلاثي القيمة: قبل: في المئة = 10.0 إنشار من الطريقة x = 30.0 الإبعاد: النسبة المئوية = 10.0Testing ثلاثي الأطوار: قبل: الراتب = 50000.0 a = alice // لم يتم تبديل المرجع نفسه بعد: b = bob
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.