انتساب متغيرهاي ارجاع شيئ
انتساب متغيرهاي ارجاع شيئ
هنگامي كه يك انتساب انجام مي گيرد ، متغيرهاي ارجاع شي ئ رفتاري متفاوت با
آنچه در ذهن داريد ، بروز مي دهند . بعنوان مثال ، حدس مي زنيد كه قطعه زير
چكاري را انجام مي دهد ?
+ Box b1 = new Box)(;
+ Box b2 = b1;
ممكن است فكر كنيد كه يك كپي از شيئي كه b1 به آن انتساب شده به b2 منتسب
شده است . يعني ممكن است تصور كنيد كه b1و b2و به اشيائ جداگانه و متفاوتي
ارجاع مي كنند . اما ، اين تصور اشتباه است . در عوض ، پس از اجراي اين قطعه
هم b1 و هم b2 هر دو به يك شي ئ ارجاع مي كنند . انتساب b1و b2و هيچ حافظه اي را
تخصيص نداده و يا بخشي از يك شي ئ اصلي را كپي نمي كند . اين برنامه خيلي ساده b2
را به همان شيئي كه b1 به آن ارجاع مي كند ، ارجاع مي دهد . بدين ترتيب هر
تغيير ايجاد شده به شيئي از طريق b2 روي شي ئ كه b1 به آن ارجاع مي كند تاثير
مي گذارد چون هر دو شي ئ يكسان هستند .
اين حالت را در شكل زير بتصوير كشيده ايم :
| |
| Width |
> b1 | Height | Box object
> |
| Depth |
|
اگرچه b1و b2و هر دو به يك شي ئ ارجاع مي كنند ، اما بطريق ديگري با يكديگر
پيوند ندارند. بعنوان مثال ، يك شي ئ پس آيند ( متعاقب ) به b1 خيلي ساده b1 را
از شي ئ اوليه جدا كرده (un hook) بدون اينكه تاثيري روي شي ئ اوليه يا b2 داشته
باشد . بعنوان مثال :
+ Box b1 = new Box)(;
+ Box b2 = b1;
+ //...
+ b1 = null;
در اينجا b1 برابر تهي (null) شده ، اما b2 همچنان به شي ئاوليه ارجاع ميكند.
يادآوري : هنگاميكه يك متغير ارجاع شي ئ را به متغير ارجاع شي ئ ديگري انتساب
مي دهيد ، يك كپي از شي ئ بوجود نيامده بلكه فقط يك كپي از ارجاع
مهندسی نرم افزار کامپیوتر