Здесь нужно помнить о разных вещах.
Во-первых, все идентичные строки констант будут интернированы, так что обе ссылки равны для начала.Следовательно, даже если вы сделали ReferenceEquals()
здесь, вы получите «true» в результате.Таким образом, только для строки, построенной (например, с StringBuilder
, или прочитанной из файла и т. Д.), Вы получите другую ссылку и, следовательно, false при выполнении сравнения равенства ссылок.
Если оба объекта известнычтобы быть строками во время компиляции, компилятор выдаст код для сравнения их значения (перегруженный оператор ==
на System.String
), а не их ссылок.Обратите внимание, что как только вы сравниваете его со ссылкой типа object
, это уже не так.
Не выполняется проверка во время выполнения для сравнения строки по значению, и компилятор не выдает .Equals()
вызов оператора ==
.