Страницы

Поиск по вопросам

воскресенье, 26 января 2020 г.

Метод equals и ==

#java


Фрагмент кода
for(int i =0; i


Ответы

Ответ 1



Любопытный факт. Для экономии памяти в Java используется пул литералов. Все строки, созданные так: String s = "abc"; помещаются в пул. Сравнивать две строки, лежащие в пуле можно оператором == String s1 = "abc"; String s2 = "abc"; s1 == s2; // true Так как эти строки созданы литералами, они ссылаются на одно место в пуле, поэтому они равны. А вот строки, созданные оператором new или конкатенацией строк (пусть даже литералов) в пул не кладутся. Они кладутся в объекты, хранящиеся в куче (heap). Поэтому сравнивать их оператором == нецелесообразно, здесь нужен метод equals: String s1 = "abc"; String s2 = "ab" + "c"; String s3 = new String("abc"); String s4 = s3; s1 == s2; // false s1 == s3; // false s3 == s4; // true s1.equals(s2); // true

Ответ 2



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

Ответ 3



== это примитивный оператор, сравнивая объекты старайтесь использовать equals, для некоторых стандартных классов оператор == и метод equals работают идентично, но не для всех. // + немного офотопа: и ещё обязательно переопределяйте метод equals если он вам нужен для сравнения собственных классов. Процесс переопределения метода очень хорошо описан у Хортсмана.

Комментариев нет:

Отправить комментарий