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 .