Test t1 = new Test();
Test t2 = t1;
t1 = null;

T2 का क्या होगा? क्या वस्तु कचरा इकट्ठा होगी?

0
Yingjie Tang 22 नवम्बर 2015, 12:01

2 जवाब

सबसे बढ़िया उत्तर

क्या होता है अगर मैं t1 = null सेट करता हूं जबकि t2 को t1 को सौंपा गया है

शीर्षक में भ्रम वहीं है: t2 नहीं को t1 सौंपा गया है। यह रेखा:

Test t2 = t1;

मान की प्रतिलिपि t1 t2 में है। कोई चल लिंक नहीं है (इसके अलावा उनके पास एक ही मूल्य है, जो इस मामले में ऑब्जेक्ट संदर्भ नामक एक चीज है जो जेवीएम को बताता है कि स्मृति में ऑब्जेक्ट कहां पाया जाए)।

इस प्रकार के प्रश्नों से निपटने के दौरान मुझे कुछ ASCII- कला पसंद हैं:

रेखा

Test t1 = new Test();

यह हमें स्मृति में देता है:

+----------+
| t1       |---+
+----------+   |   +-------------+
               +-->| Test object |
                   +-------------+

फिर लाइन:

Test t2 = t1;

हमें यह देता है:

+----------+
| t1       |---+
+----------+   |   +-------------+
               +-->| Test object |
+----------+   |   +-------------+
| t2       |---+
+----------+       

फिर

t1 = null;

हमें देता है:

+----------+
| t1: null |
+----------+       +-------------+
               +-->| Test object |
+----------+   |   +-------------+
| t2       |---+   
+----------+       

t2 आप t1 कुछ भी करने से पूरी तरह से अप्रभावित हैं।

4
T.J. Crowder 22 नवम्बर 2015, 09:11

t2 कुछ नहीं होता है। यह अभी भी उसी Test उदाहरण को संदर्भित करता है जिसे मूल रूप से t1 और t2 दोनों द्वारा संदर्भित किया गया था, और जब तक यह संदर्भ मौजूद है, तब तक यह उदाहरण एकत्र नहीं किया जा सकता।

3
Eran 22 नवम्बर 2015, 09:02