first
ist ein Verweis auf ein Objekt des Typs StringBuilder
. Das heißt, first
speichert einen Wert, der verwendet werden kann, um auf ein Objekt auf dem Heap zu verweisen, das vom Typ Stringuilder
. second
ist ein weiterer Verweis auf ein Objekt des Typs StringBuilder
und sein Wert wird zunächst auf dasselbe Objekt gesetzt, das first
bezieht sich auf.
Wenn Sie den Wert von first
Was Sie tun, ist, die Bezeichnung des Referenten zu ändern. Das heißt, Sie verwenden first
um auf ein anderes Objekt zu verweisen. Dies hat keine Auswirkungen auf second
; sein Wert wird nicht durch Änderungen des Wertes von first
. (Zur Erinnerung: Der Wert von first
y second
sind Referenzen, die zunächst denselben Referenten haben. Aber genau wie bei
int x = 1;
int y = x;
x = 2;
ändert nicht den Wert von y
ändern Sie den Wert von first
ändert nicht den Wert von second
.
Andererseits, wenn first
y second
auf dasselbe Objekt verweisen, werden alle Änderungen an diesem Objekt durch beide first
y second
.
Stellen Sie sich das so vor. Nehmen wir an, ich erstelle eine Textdatei first.html
deren Inhalte sind
<a href="http://stackoverflow.com">Stack Overflow</a>
und ich gebe den Befehl copy first.html second.html
. Dann können beide Seiten verwendet werden, um auf dieselbe Webseite zu verweisen; wenn wir dem Link folgen, gelangen wir zu demselben Verweis. Wenn Änderungen an der Homepage von Stack Overflow vorgenommen werden, kann der Zugriff auf die Homepage entweder über first.html
o second.html
wird es mir ermöglichen, diese Änderungen zu sehen. Wenn ich dann aber den Inhalt von first.html
zu sein
<a href="http://www.thedailywtf.com>The Daily WTF</a>
dann kann ich nicht mehr verwenden first.html
um auf die Stack Overflow-Homepage zu verweisen. Außerdem hat diese Änderung keine Auswirkungen auf den Wert von second.html
. Es ist immer noch
<a href="http://stackoverflow.com>Stack Overflow</a>
Stellen Sie sich den Inhalt dieser Dateien als die Werte eines Referenztyps vor, und die endgültige Bestimmung als das Referenzobjekt.