Вы выбрали интересный случай здесь, потому что в .NET он нарушает принцип наименьшего удивления. Каждый раз, когда вы выполняете
string x = new string(new char[0]);
вы получите ссылку на ту же строку .
(РЕДАКТИРОВАТЬ: Просто чтобы быть очень ясным об этом - это ненулевая ссылка. Она ссылается на строку так же, как если бы вы использовали любую другую форму конструктора или строковый литерал.)
Я уверен, что использовал для ссылки на другую строку с "", но теперь она выглядит так же:
using System;
public class Test
{
static void Main()
{
object x = new string(new char[0]);
object y = new string(new char[0]);
object z = "";
Console.WriteLine(x == y); // True
Console.WriteLine(x == z); // True
}
}
Насколько мне известно, это только случай, когда вызов new
для класса может вернуть ссылку на существующий объект.