Перейти к основному содержимому

Строка equals() против contentEquals() в Java

· 3 мин. чтения

1. Введение

Методы equals() и contentEquals() класса String в Java используются для выполнения сравнения строк . Однако существуют определенные различия между функциями этих двух методов.

В этом руководстве мы кратко рассмотрим различия между этими двумя методами на практических примерах.

2. Метод equals ()

Метод equals() является общедоступным методом класса Java String . Он переопределяет исходный метод equals() из класса Object . Сигнатура этого метода:

public boolean equals(Object anObject)

Метод сравнивает две разные строки S, проверяя отдельные символы в обеих. Однако метод не только проверяет содержимое, но также проверяет, является ли объект экземпляром String . Поэтому метод возвращает true только в том случае, если выполняются все эти условия:

  • объект аргумента не равен нулю
  • это объект String
  • последовательность символов идентична

3. Метод contentEquals ()

Подобно методу equals() , метод contentEquals() также используется для сравнения содержимого строки . Однако, в отличие от метода equals() , contentEquals() принимает в качестве аргумента любую реализацию интерфейса CharSequence . Это означает , что можно сравнивать String , StringBuffer , StringBuilder , CharBuffer или Segment .

Сигнатура этого метода:

public boolean contentEquals(StringBuffer sb)
public boolean contentEquals(CharSequence cs)

Поэтому метод contentEquals() работает только с содержимым строки . Если аргумент является объектом String , для сравнения вызывается метод equals() . С другой стороны, если предоставляется общая последовательность символов, метод сравнивает отдельные символы в сходных позициях.

Метод возвращает true , если последовательность символов в заданном аргументе совпадает с исходной строкой . В отличие от метода equals() , если в метод contentEquals() передается нулевой аргумент , он создает исключение NullPointerException .

4. Примеры

Давайте посмотрим на эти два метода в действии, написав простые тестовые примеры. Для простоты давайте использовать слово «ForEach» для нашего кода.

Во- первых, мы возьмем два идентичных объекта String и проверим их. В этом случае оба метода вернут истинное значение:

String actualString = "foreach";
String identicalString = "foreach";

assertTrue(actualString.equals(identicalString));
assertTrue(actualString.contentEquals(identicalString));

Далее возьмем две разные реализации CharSequence с идентичным содержимым. Для первой реализации мы создадим экземпляр CharSequence со строкой . В этом случае оба метода должны возвращать true , так как содержимое и типы идентичны:

CharSequence identicalStringInstance = "foreach";

assertTrue(actualString.equals(identicalStringInstance));
assertTrue(actualString.contentEquals(identicalStringInstance));

В следующем примере мы возьмем реализацию StringBuffer . Поскольку метод contentEquals() проверяет только содержимое, он должен возвращать true . Однако метод equals() должен быть ложным :

CharSequence identicalStringBufferInstance = new StringBuffer("foreach");

assertFalse(actualString.equals(identicalStringBufferInstance));
assertTrue(actualString.contentEquals(identicalStringBufferInstance));

5. Вывод

В этой статье мы кратко рассмотрели два метода класса String . В то время как метод equals() сравнивает только экземпляры String , метод contentEquals() может сравнивать любую реализацию CharSequence .

В заключение, мы должны использовать contentEquals() , когда нас интересует только содержимое объекта. С другой стороны, иногда может быть важно проверить тип объекта. В этом случае мы должны использовать метод equals() , который дает нам более строгие условия проверки.

Как всегда, фрагменты кода доступны на GitHub .