0
私は、参照型と値型の違いを理解していると思いました。私は 'string'の値型がのセマンティクスしか持たず、参照型の動作を保持していると考えました。それから、私はこれを試しました。どちらの場合でもTrueが返されると思っていました。 私は何を誤解していますか?stringが参照型の場合、strAの値はこの場合変更されないのはなぜですか?
string strA = "AAA";
string strB = strA;
strB = "BBB";
Console.WriteLine($"strA is {strA} and strB is {strB}");
Console.WriteLine($"The statement: strA == strA is {strA == strB} \n");
Car car1 = new Car();
car1.Horsepower = 190;
Car car2 = car1;
car2.Horsepower = 200;
Console.WriteLine($"car1.Horsepower is {car1.Horsepower} and car2.Horsepower is {car2.Horsepower}");
Console.WriteLine($"The statement: car1 == car2 is {car1 == car2}");
出力:
STRAがAAAであるとSTRBがBBB
文です:ストラはストラは
car1.Horsepowerが200であるFalseで==とcar2.Horsepowerが200であります
ステートメント:car1 == car2はTrueです
文字列値が設定されると、メモリ内のその位置を指します。変更することはできません。新しい値を設定すると、新しい値を保持するメモリ内の別の場所への新しいポインタが実際に取得されます。 この動作が必要な場合は、文字列ビルダーで試してみてください。 StringBuilder builderA =新しいStringBuilder( "AAA"); StringBuilder builderB = builderA; builderB.Replace( "AAA"、 "BBB"); (ビルダーB.ToString()} "); – Aaron
@Aaron:ああ。私はC#で文字列を変更することはできません。私は、値を変更するとポインタが変化するというアイデアに対して、私はそれを二分しませんでした。 StringBuilderを理解してくれてありがとう。もし私ができるなら、私は答えとしてこのコメントをマークします。 – PakiPat
他の「純粋な」参照型に共通する文字列の唯一の側面は、スタックではなくヒープに保存されるということです。 – PakiPat