Можно создать дубликат:
Please tell why two references are same for string object in case of string(Code written below)Как работает оператор == по умолчанию для строк?
Когда я пишу в C# s1 == s2
где и объявлена как строка будет компилятором сравнивать ссылки или содержание? То есть если ==
переоценивается для класса string
?
Я просто удивляюсь, почему этот код печатает «истинные»:
string s1 = "hello"
string s2 = s1 + " ";
s2 = s2.Trim(); // i expect new object here
Console.WriteLine(s2 == s1);
Также я несколько источников сторонних где ==
часто используются для струнных Comparision. Это делает меня сумасшедшим, потому что я почти никогда не использую ==
для сравнения строк в Java, и теперь я не могу понять, как работает этот код.
Нормально ли использовать ==
для сравнения строк в C#?
upd: Спасибо всем, почти все ответы верны. В заключение:
- Да, это нормально использовать «==» для сравнения строки в C#
- строк будут сравниваться по содержанию (не ссылаться)
- == оператора для строк не является виртуальным.
- строки в C# неизменны (это похоже на Java)
Это поведение отличается от Java, где «==» для класса строк сравнивает ссылки.
смотри также Why strings does not compare references?
По моему личному мнению, язык не позволяет переопределить или перегрузки == оператора, потому что делает это так сложно, как с ++ :)
Из-за того, как .NET обрабатывает интернирование строк, сравнение строк по ячейкам памяти часто приводит к неожиданным результатам. Я предполагаю, что это основное отличие от Java (действительно ли Java выполняет интернирование строк)? – MattDavey