В чем разница между "==" и equals(...)? между поверхностным и глубоким (shallow & deep ) сравнением объектов?

max аватар
112
Находится в разделах:

"==" [ shallow comparison ]

"==" возвращает true, если ссылочная переменная указывает на тот же объект в памяти. Это сравнение называется поверхностным или shallow comparison.

equals( ) [deep comparison ]

equals() обеспечивает глубокое сравнение благодаря проверке двух объектов на логическое равенство,в отличии от поверхностного сравнения с помощью оператора "==".

Если equals() не определен в пользовательском классе, тогда выполняется унаследованный метод equals() класса Object, который проверяет равенство ссылок в памяти.  object.equals() работает также как и "==".
Строчное присваивание с использованием оператора "new" подчиняется такому же правилу, что и  "==", и equals().

Альтернативный метод использования:

Ниже представлено литеральное присваивание, где присваиваемое значение идентично другому строчному присваиванию из примера выше, с использованием оператора new.

Посмотрим на пример:

Класс String спроектирован с использованием паттерна Flyweight. Когда Вы создаете String константу, как показано в примере выше (String s3="A", s4="A"), он проверит сперва пул на его присутствие. Если он в пуле, он будет использован заново, вместо создания нового. Объекты по паттерну Flyweight являются общими объектами и их использование может повысить производительность. 


Конец
Иммануил Кант абсолютно уверен в том, что если дать человеку все, чего он желает, то в ту же минуту он почувствует, что это все не есть все.

 

Ошибка:

 

15         if (s3 == s4) { // поверхностное сравнение
16             System.out.println("ссылки равны"); // эта строка никогда не печатается

 

 

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

CAPTCHA
Чтобы оставить комментарий, введите пожалуйста код, изображенный на картинке
Image CAPTCHA
Введите символы, изображенные на картинке