У меня это получилось довольно запутанным, потому что информация, которую я получил по этой теме, была структурирована таким глупым способом, сначала объяснив, что сравнение между ссылочными типами осуществляется только только по их адресам, используя оператор '== '(все это было опубликовано в полужирным шрифтом с пояснениями о 4 страницах). Кроме того, все примеры были заданы строками, но не было ни единого слова о каком-либо значении равенства между ними. Итак, после публикации здесь, я решил закончить целую главу по делу и 3 страницы позже (на самом деле последнее предложение на последней странице) заявляло, что для «==» существует другое поведение при использовании для сравнения строки. Абсолютно идиотский. Итак, для окончательной проверки, чтобы убедиться, что у меня есть информация справа:
«==», используемый для строк, сначала проверяет, ссылаются ли обе переменные на один и тот же объект. Если нет, выполняется ли фактическое сравнение значений в самом содержимом.
Использование строковых констант как: bool isEqual = (a == "somethingNew");
для сравнения будет фактически получать постоянное значение, искать его в так называемом пуле, и если оно имеет совпадение, оно будет ссылаться на тот же объект? Значит, он фактически присваивает ему переменную? Извините, это все еще немного неясно для меня.
И последний (пример из данной статьи):
string firstString = "deer";
string secondString = firstString;
string thirdString = "de" + 'e' + 'r';
cw(firstString == secondString); // True - same object
cw(firstString == thirdString); // True - equal objects
cw((object)firstString == (object)secondString); // True
cw((object)firstString == (object)thirdString); //False
не должны в этом случае значение thirdString искать в бассейне и всей переменной, чтобы получить ссылку на тот же объект, что и firstString и secondString?
Я думаю, что это ** не ** действительно отвечает прямо на то, что ОП просит (последнее предложение). –
Хорошая точка @KingKing - я добавлю к ней. – Haney
Я понимаю, что все строки одного и того же значения будут указывать на одну и ту же ссылку (включая строковую константу), что означает, что второй пример OP будет проверять только ссылку, и он должен возвращать значение true. Чтобы создать новую ссылку того же значения, я думаю, что мы можем использовать 'string.Copy', а затем она будет возвращаться, чтобы сравнить все символы, как вы сказали. –