タイトル: string 型が参照型であることを示すサンプルコード
以下のコードは、C# の string 型が参照型であることを説明するためのサンプルです。また、new 演算子を使用して明示的に string オブジェクトを生成し、その参照の挙動を観察します。
using System;
class Program
{
static void Main()
{
// new演算子を使ってstringオブジェクトを生成
string str1 = new string(new char[] { 'H', 'e', 'l', 'l', 'o' });
string str2 = str1; // str1の参照をstr2に代入
Console.WriteLine($"str1: {str1}");
Console.WriteLine($"str2: {str2}");
// str2を変更する
str2 = "World";
// 参照型であってもstringはイミュータブルなため、str1には影響しない
Console.WriteLine("\n変更後:");
Console.WriteLine($"str1: {str1}");
Console.WriteLine($"str2: {str2}");
// メモリアドレスの確認(参考: Object.ReferenceEquals を使用)
Console.WriteLine("\nメモリアドレス比較:");
Console.WriteLine($"str1とstr2は同じ参照を持っている: {Object.ReferenceEquals(str1, str2)}");
// newで生成した場合のアドレス確認(参照型特性の確認)
string str3 = new string(new char[] { 'H', 'e', 'l', 'l', 'o' });
Console.WriteLine($"str1とstr3は同じ参照を持っている: {Object.ReferenceEquals(str1, str3)}");
}
}
コードのポイント
new string(char[])を使用してstringオブジェクトを明示的に生成。str1を別の変数str2に代入し、str2を変更。- 変更後も
stringのイミュータブル特性により、str1の値は影響を受けません。
- 変更後も
Object.ReferenceEqualsを使い、異なるインスタンスが生成されていることを確認。
実行結果の例
str1: Hello
str2: Hello
変更後:
str1: Hello
str2: World
メモリアドレス比較:
str1とstr2は同じ参照を持っている: False
str1とstr3は同じ参照を持っている: False
解説
- 参照型としての特性:
string型は参照型であり、newを使うとメモリ上に新しいオブジェクトが生成されます。
- イミュータブル性:
stringオブジェクトは一度生成されるとその内容を変更できません。そのため、str2を変更してもstr1に影響を与えません。
このサンプルコードは、string の参照型としての特性とイミュータブル性の両方を示すのに役立ちます。
訪問数 27 回, 今日の訪問数 1回





ディスカッション
コメント一覧
まだ、コメントがありません