الإسناد المتعدد

لم أتكلم كثيراً عن ذلك سابقاً، لكن يسمح بعمل أكثر من عملية إسناد للمتغير الواحد في Java. إن ما ستفعله تعليمة الإسناد الثانية هو استبدال قيمة المتغير القديمة بواحدة جديدة.
كود:
int fred = 5;
System.out.print (fred);
fred = 7;
System.out.println (fred);
إن خرج هذا البرنامج هو 57، لأن أول مرة طبعنا فيها fred كانت قيمته 5، وفي المرة الثانية كانت قيمته 7.
هذا النوع من الإسناد المتعدد (multiple assignment) هو سبب الذي يدفعني لوصف المتغيرات بأنها حاويات للقيم. عندما تسند قيمة ما لتغير، فإنك تغير محتويات الحاوية، كما هو مبين في الشكل:
http://file.topmaxtech.net/images/ph...3959298701.jpg
عند وجود عدة تعليمات إسناد لمتغير واحد، من المهم بصورة خاصة التمييز بين تعليمات الإسناد وتعليمات المساواة. بما أن Java تستعمل الرمز = للإسناد، فقد يؤدي ذلك لتفسير تعليمة مثل a = b على أنها تعليمة مساواة. وهي ليست كذلك!
أولاً، المساواة تبديلية، والإسناد ليس كذلك. مثلاً، في الرياضيات إذا كان a = 7 فإن 7 = a. لكن في Java التعليمة
a = 7; هي تعليمة إسناد مشروعة، أما 7 = a; ليست كذلك.
أكثر من ذلك، في الرياضيات، تعليمة المساواة محققة دائماً. إذا كان a = b الآن، فإن a سيظل مساوياً لـ b إلى الأبد. في Java، يمكن لتعليمة الإسناد أن تساوي بين متغيرين، لكن لا شيء يفرض عليهما البقاء هكذا!
كود:
int a = 5;
int b = a;           // a and b are now equal
a = 3;          // a and b are no longer equal
يغير السطر الثالث قيمة a لكنه لا يغير قيمة b، وهكذا لم يعد a وb متساويين. في العديد من لغات البرمجة الأخرى يتم استعمال رمز آخر لعملية الإسناد، مثل <- أو := ، وذلك لتفادي هذا الإرباك.
على الرغم من أن الإسناد المتعدد مفيد كثيراً، عليك التعامل معه بحذر. إذا استمرت قيم المتغيرات بالتغير في أجزاء البرنامج المختلفة، فستصبح الشفرة أصعب للقراءة والتنقيح.