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

"==" [ 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 являются общими объектами и их использование может повысить производительность.
Материалы, которые могут вас заинтересовать
- Синхронизация потоков. Для чего предназначен метод join()?
- Как происходит взаимодействие между потоками? Как реализовать producer (один поток) и consumer (другой поток) для передачи данных через стек?
- Что такое daemon thread?
- Сихронизация потоков. В чем разница между синхронизацией метода и блока?
- Потоки в Java. Чем отличаются методы yield(), sleep(), wait()?
- Какие существует методы создания потоков (нитей)?
- Почему не рекомендуется отлавливать тип исключения “Exception”?
- Что такое приведение типов? Объясните up casting/down casting. Когда происходит ClassCastException?
- В чем преимущество операторов "&&, ||" над логическими "&, |"?







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