基本的にここでは、文字列が不変であることを例で示したいので、以下の例を取り上げました。GetHashCode() がアドレスを返さないことはわかっていますが、両方の変数が異なるメモリ位置を参照していることをどのように区別できますか?
以下のコードでは、文字列変数のアドレスが必要です
        string s = "hello";
        Console.WriteLine(s.GetHashCode());
        s = s + "User";
        Console.WriteLine(s.GetHashCode());
ただし、String Builder の場合、GetHashCode() は同じ値を返します
        StringBuilder sb = new StringBuilder();
        sb.Append("hi");
        Console.WriteLine(sb.GetHashCode());
        sb.Append("hello");
        Console.WriteLine(sb.GetHashCode());