Mam pewne zamieszanie w odniesieniu do ciągu znakówtype lub value type, mam dwie zmienne typu string, przypisuję wartość pierwszej zmiennej, a następnie przypisuję tę samą zmienną do drugiej zmiennej, jeśli coś zmienię na pierwszej zmiennej wartość nie dostanie zmiany w drugiej zmiennej, ponieważ druga zmienna jest również wskazując na to samo miejsce, w którym znajduje się pierwszy?
string string1 = "abc";
string string2 = string1;
string1 = "xyz";
tutaj string1 ma wartość xyz, a string2 to abc
Odpowiedzi:
4 dla odpowiedzi № 1Oto co się dzieje:
string string1 = "abc";
string1
jest odniesienie do ciągu „abc”, który gdzieś mieszka na stercie.
string string2 = string1;
string2
to kolejne odniesienie, które po prostu wskazuje na to samo miejsce w pamięci, co string1
. To odniesienie zostało skopiowane do string2
kiedy używałeś operatora przypisania. Masz teraz dwie zmienne, które wskazują na to samo miejsce w pamięci.
string1 = "xyz";
string1
teraz wskazuje na nowo utworzony ciąg zawierający „xyz”. string2
nadal wskazuje na „abc”, co jest nadal osiągalny i nie otrzymasz śmieci.
W każdym razie tak; Łańcuch jest typem odniesienia.