На данный вопрос уже ответили:
Почему будет выведен 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
.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Скачал с nuget jQuery contextMenuВсё необходимое подключил к проекту
я понимаю для чего служат индексаторы, но вот столкнулся с заданием, и просто не понимаю, как правильно вызвать и как передать
Пытаюсь установить связь, с таблицей другой в asp net core, у меня выдает ошибку: