/ / string jest typem wartości lub typem referencyjnym? [duplikat] - c #, c # -4,0, c # -3,0

ciąg jest typem wartości lub typem referencyjnym? [duplikat] - c #, c # -4,0, c # -3,0

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 № 1

Oto 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.