1. طريقة نقل المعلمة
لحل مشكلة العنوان ، قدم أولاً طريقة تمرير المعلمة. حاليا ، هناك ثلاث طرق نقل المعلمات الرئيسية لمختلف لغات البرمجة:
1. تمرير بالقيمة
2. تمرير بالرجوع إليه
3. تمرير بواسطة المؤشر
تتلقى طريقة تمثيل القيمة (الدالة) نسخة من المتغير الذي يوفره المتصل دون تغيير قيمة المعلمة ؛ يتم تمرير قيمة المتغير الذي يوفره المتصل بواسطة المرجع ؛ يتم استلام قيمة القيمة (الوظيفة) بواسطة المؤشر بواسطة المؤشر من قبل المؤشر دون تغيير قيمة المؤشر وعنوانه ، ولكن يمكن تغيير العنوان الذي أشار إليه المؤشر.
2. طريقة نقل معلمة Java
لسوء الحظ ، لا يوجد سوى طريقة واحدة لتمرير معلمة واحدة توفرها Java ، والتي يتم تمريرها بالقيمة. أي أن الطريقة تحصل على نسخة من جميع قيم المعلمات ، ولا يمكن للطريقة تعديل محتوى متغير المعلمة الذي تم تمريره إليه.
يمكن تقسيم أنواع معلمات طريقة Java إلى فئتين:
1. أنواع البيانات الأساسية
2. مرجع الكائن
يعرف الأصدقاء الذين لديهم خبرة في تطوير Java أنه بالنسبة لأنواع البيانات الأساسية ، لا يمكن لأساليب Java تغيير محتوى المتغيرات. لذلك لا يمكن تعديل المحتوى بالرجوع إلى كائن الفئة المخصصة؟ يمكن تفسير ذلك من خلال مثال بسيط. الرمز كما يلي:
PUBPC Class MyClass {private object num ؛ PUBPC myClass (Object num) {this.num = num ؛ } pubpc object getNum () {return num ؛ } pubpc void setNum (object num) {this.num = num ؛ }} PUBPC Class MAIN {PUBPC Static void Change (MyClass MyClass) {myClass.setnum (100) ؛ } pubpc static void main (string [] args) {myClass a = new MyClass (10) ؛ System.out.println ("القيمة قبل استدعاء طريقة التغيير هي:"+A.GetNum ()) ؛ التغيير (أ) ؛ System.out.println ("القيمة بعد استدعاء طريقة التغيير هي:"+A.GetNum ()) ؛ }}نتائج إخراج تنفيذ الكود أعلاه هي كما يلي:
من النتائج ، يمكن ملاحظة أن طريقة التغيير يمكن أن تعدل حالة الكائن. بمعنى آخر ، يمكن أن تغير طرق Java حالة المعلمة للكائن. فهل هذا يعني أن طرق Java تستخدم تمريرات مرجعية لمعلمات أنواع البيانات المخصصة (الفئات المخصصة)؟ لتأكيد النتائج ، يمكنك كتابة مثال بسيط ، ولا تزال جميع الفئات المخصصة MyClass أعلاه. الرمز كما يلي:
PubPC Static Void Swap (myClass A ، MyClass B) {myClass TMP = A ؛ أ = ب ؛ ب = TMP ؛ } pubpc static void main (string [] args) {myClass a = new MyClass (10) ؛ myClass B = myClass جديد (100) ؛ System.out.println ("قيمة A قبل المبادلة هي:"+A.GetNum ()) ؛ System.out.println ("قيمة B قبل المبادلة هي:"+B.GetNum ()) ؛ مبادلة (أ ، ب) ؛ System.out.println ("قيمة A بعد التبادل هي:"+A.GetNum ()) ؛ System.out.println ("قيمة B بعد التبادل هي:"+B.GetNum ()) ؛ }}نتائج التنفيذ هي كما يلي:
من النتائج المذكورة أعلاه ، يمكننا أن نجد أن أساليب Java لا تزال تستخدم قيمة تمرير المعلمة لفئات مخصصة ، وليس مرجع. إذن لماذا يمكن أن تعدل طرق Java حالة الكائن؟
يمكنك النظر في عملية التنفيذ المحددة لاستدعاء طريقة التغيير للعثور على الإجابة.
عملية التنفيذ المحددة هي:
تتم تهيئة MyClass إلى نسخة مع المعلمة الفعلية A ، والتي هي إشارة إلى الكائن.
يتم تطبيق طريقة setNum على مرجع هذا الكائن. يتم تغيير عدد كائن MyClass المشار إليه بواسطة MyClass ويتم تغيير A إلى 100.
بعد الانتهاء من الطريقة ، لم يعد MyClass متغير المعلمة يستخدم. ويستمر A في الإشارة إلى كائن MyClass الذي يصبح NUM 100. كما هو موضح في الشكل أدناه.
لذلك ، فإن السبب في أن أساليب Java يمكنها تغيير حالة معلمة الكائن هو أن الطريقة تحصل على نسخة من مرجع الكائن ، ومرجع الكائن والنسخ الأخرى في الطريقة تشير إلى نفس الكائن في نفس الوقت.
الآن ، دعنا نلخص معلمات طريقة Java:
لا يمكن للأساليب تعديل معلمات نوع البيانات الأساسية ؛
الأساليب يمكن أن تغير حالة معلمات الكائن ؛
لا يمكن للأساليب جعل معلمات الكائن تشير إلى كائن جديد (السبب هو الرجوع إلى عملية التنفيذ المحددة عند استدعاء طريقة التغيير).
3. تبادل القيم العددية للمتغيرات
نظرًا لأنك تعرف بالفعل السبب ، فليس من الصعب معرفة السبب. انشر الكود الشخصي الخاص بي مباشرة:
تبديل void static pubPC (myclass a ، myclass b) {object tmp = a.getnum () ؛ A.SetNum (B.GetNum ()) ؛ B.Setnum (TMP) ؛}نتائج التنفيذ هي كما يلي:
البورصة صالحة.
المراجع: Java Core Technology Volume I.
المقالة أعلاه حول Java تبادل طريقة التنفيذ العددي لمتغيرين هي كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.