Использовать == или Equals для сравнения строк

в некоторых языках (например, C++) вы не можете использовать операторы like == для сравнения строк, так как это будет сравнивать адрес объекта string, а не саму строку. Однако в C# вы можете использовать == для сравнения строк, и он фактически будет сравнивать содержимое строк. Но есть также строковые функции для обработки таких сравнений, поэтому мой вопрос: Должны ли вы?

даны две строки:

string aa = "aa"; 
string bb = "bb";

Если вы сравните их:

bool areEqual = (aa == bb); 

или вы должны использовать равную функцию, например:

bool areEqual = aa.Equals(bb); 

есть ли какая-либо техническая разница? Или разумные аргументы в пользу наилучшей практики?

5 ответов


Я бы не стал использовать:

aa.Equals(bb)

если я знал aa не мог возможно быть null. Я мог бы использовать:

string.Equals(aa,bb)

но я бы в основном использовал, что я хотел использовать один из конкретных StringComparison режимы (инвариантные, порядковые, нечувствительные к регистру и т. д.). Хотя я мог бы также использовать StringComparer реализации, так как их немного легче абстрагировать (например, передать в Dictionary<string, Foo> для порядкового словаря без учета регистра). Для общего использование цели,

a == b

- это хорошо.


это реализация оператора:

    public static bool operator == (String a, String b) {
       return String.Equals(a, b);
    }

Не теряйте сон из-за этого.


нет никакой технической разницы (если aa не равно null). Используй то, что кажется тебе лучше. На мой взгляд, использование перегрузки операторов делает код более понятным.

используйте функции, когда вам нужны (или могут понадобиться в будущем) их дополнительные аргументы (как в CompareTo ())


Best-Practice-wise, я бы всегда использовал функцию Equals () для сравнения строк. Это дает понять, когда кто-то другой читает ваш код, что вы специально хотите сравнить строки.


вообще говоря, == равенство указателя, в то время как .equals проверяет, равны ли атрибуты. Поэтому, если вы сделали что-то вроде

a = 'a';
b = 'a';
bool c = (a == b);
bool d = (a.Equals(b))

тогда c должен возвращать false, А d-true.