На данный вопрос уже ответили:
Почему будет выведен false? Можно, пожалуйста, объяснить как можно подробнее?
string s1 = string.Format("{0}{1}", "abc", "cba");
string s2 = "abc" + "cba";
Console.WriteLine((object)s1==(object)s2);
Более расширенный ответ: Что такое interning и как им пользоваться
В последней строке вы приводите каждую сравниваемую строку к object'у. Объекты в с C# являются ссылочными типами и сравниваются соответственно по ссылке. Ваши строки - разные объекты, хранящиеся по разным адресам, и, следовательно, имеющие разные ссылки на них.
Впрочем string в C# - ссылочный тип. Следовательно строки по идее должны сравниваться также по ссылкам, и сравнение должно выдавать false даже без приведения к object. Но это не так, поскольку сравнение строк в C# выполняется по значению. Подобное поведение удобно и предпочтительно в большинстве случаев.
Помимо этого стоит отметить и то, что и копируются строки тоже по значению, следовательно при изменении строки вы на самом деле создаёте новую, а не меняете старую
потому, что ты сравниваешь ссылки на обьекты, а не сами обьекты.
Все reference-type обьекты через == сравниваются по ссылке.
Окроме тех типов данных, в которых == переопределен. В случае с строками -- этот метод переопределен и сравнивается значение, а не ссылка.
Когда ты сравниваешь
(object)s1==(object)s2
то ты используешь оригинальный == а не переопределенный. А т.к. это разные обьекты и они находятся в разных местах памяти, вот тебе и возвращает false.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости