サンプルコードがあります。
var charMass = new char[] { 's', 't', 'r' };
string myString = new string(charMass);
string myString2 = new string(charMass);
string myString3 = "str";
string myString4 = "str";
bool bb1 = Object.ReferenceEquals(myString, myString2);
bool bb2 = Object.ReferenceEquals(myString, myString3);
bool bb3 = Object.ReferenceEquals(myString3, myString4);
bb1 と bb2 が false なのはなぜですか? equals は値を比較するため、true を示さなければならないことはわかっていますが、これらの文字列のメモリ割り当てはどうでしょうか。myString3 と myString4 がヒープ内の同じメモリ ブロックを指しているのに、myString と myString2 が指していないのはなぜですか?