تعدد الأسماء

تذكر أنك عندما تسند شيئاً إلى متغير كائني، فأنت تسند مرجعاً إلى كائن. من الممكن وجود عدة متغيرات تشير إلى الكائن نفسه. مثلاً، هذه الشفرة:
كود:
Rectangle box1 = new Rectangle (0, 0, 100, 200);
Rectangle box2 = box1;
تولد مخطط حالة يبدو كهذا:

http://file.topmaxtech.net/images/ph...3961815761.jpg

كلا المتغيرين box1 وbox2 يشيران إلى الكائن نفسه. بكلمات أخرى، هذا الكائن له اسمين، box1 وbox2. عندما يستخدم شخص ما اسمين، يدعى ذلك aliasing. نفس الشيء مع الكائنات.
عندما يشير متغيران إلى كائن واحد، فإن أي تغييرات تؤثر على أحدهما ستؤثر على الآخر أيضاً. مثلاً:
كود:
System.out.println (box2.width);
box1.grow (50, 50);
System.out.println (box2.width);
يطبع السطر الأول القيمة 100، وهي عرض المستطيل المشار إليه بالمتغير box2. يستدعي السطر الثاني عملية grow على box1، التي توسع المستطيل بمقدار 50 بكسل في كل جهة (انظر في الوثائق للمزيد من التفاصيل). تم تمثيل أثر ذلك في الشكل:

http://file.topmaxtech.net/images/ph...3961815762.jpg

يجب أن يتضح من الشكل، أن أية تعديلات تجري على box1 ستطبق على box2 أيضاً. بالتالي، ستكون القيمة المطبوعة في السطر الثالث 200، عرض المستطيل بعد التوسيع. ( من جهة أخرى، من المشروع تماماً أن تكون إحداثيات المستطيل سالبة).
كما يتبين من هذا المثال البسيط، يمكن للشفرة التي تشتمل على تعدد الأسماء أن تصبح مربكة بسرعة، ويمكن لها أن تصبح صعبة التنقيح للغاية. بشكل عام، يجب تفادي الأسماء المتعددة أو استعمالها بحذر.