タイトル: 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
の参照型としての特性とイミュータブル性の両方を示すのに役立ちます。
ディスカッション
コメント一覧
まだ、コメントがありません