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