Как работает метод Java String Class .equals? - PullRequest
0 голосов
/ 12 ноября 2018

В Java есть метод класса string, который работает, как показано ниже.Но мне интересно, как получается, что мы можем вызывать метод для случайной величины типа string?

String word = "hello"
word.equals("hello");

вывод равен true

Ответы [ 4 ]

0 голосов
/ 12 ноября 2018

String class (String в Java is Object) унаследовал метод equals от Object и переопределил его, как правильно указано в ответах Sand и Armine.

Мы можем вызывать методы для String (даже для константы String, оператор: «Hello World» .length () возвращает 11) , потому что String является объектом, а не примитивным типом .Типами примитивов являются byte, short, int, ... Подробнее о них можно прочитать здесь

Отличное прочтение о различиях между типами примитивов и объектами: Разница между переменной Primitive и Referenceна Java

0 голосов
/ 12 ноября 2018

метод equals сравнивает строку, для которой вызывается метод, со строкой, которая передается в качестве параметра.

Просмотрите следующие ссылки:

Сравнение строк

Равно для String

Переопределение равно в классе String

0 голосов
/ 12 ноября 2018

Если вы сравниваете String с такими примитивами, как int,long. Ответ Строка не примитив. Это класс. Есть несколько способов создать объект из этого класса, как

String word=new String("hello");
String word="hello"; //special case for String class

теперь word становится объектом, и вы можете вызывать метод equals (поскольку каждый создаваемый вами объект наследуется от класса java.lang.Object).

Если вы посмотрите на примитивы как int. Вы не можете сделать что-то, как показано ниже, потому что number не является объектом.

int number=12; 
number.equals(12)
0 голосов
/ 12 ноября 2018

Метод equals() используется для проверки, является ли состояние экземпляров двух классов Java одинаковым. Поскольку equals() принадлежит классу Object, каждый класс Java наследует его. Но метод equals() должен быть переопределен, чтобы он работал правильно. Конечно, String переопределяет equals().

Взгляните:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }

    if (anObject instanceof String) {
        String aString = (String)anObject;
        if (coder() == aString.coder()) {
          return isLatin1() ? StringLatin1.equals(value, aString.value)
            : StringUTF16.equals(value, aString.value);
        }
    }

    return false;
}

Как видите, состояние значения класса String должно быть равно (), а не ссылка на объект. Неважно, если ссылка на объект отличается; состояние строки будет сравниваться

Я взял это у здесь . Лучше, если у вас есть представление о String pool. Поэтому, пожалуйста, обратитесь по ссылке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...