Две разные «строки» — это один и тот же экземпляр объекта?

Код довольно понятен. Когда я создавал a1и b1, я ожидал, что создаю два разных экземпляра строки, которые содержат один и тот же текст. Итак, я полагаю, что a1 == b1будет истинным, но object.ReferenceEquals(a1,b1)будет ложным, но это не так. Почему?

//make two seemingly different string instances
string a1 = "test";
string b1 = "test";         
Console.WriteLine(object.ReferenceEquals(a1, b1)); // prints True. why?

//explicitly "recreating" b2
string a2 = "test";
string b2 = "tes";
b2 += "t";    
Console.WriteLine(object.ReferenceEquals(a2, b2)); // prints False

//explicitly using new string constructor
string a3 = new string("test".ToCharArray());
string b3 = new string("test".ToCharArray());    
Console.WriteLine(object.ReferenceEquals(a3, b3)); // prints False
19
задан jb. 28 May 2012 в 04:57
поделиться