.equals()
сравнивает данные в классе (при условии, что функция реализована). ==
сравнивает местоположения указателя (расположение объекта в памяти).
==
возвращает true, если оба объекта (NOT TALKING OF PRIMITIVES) указывают на экземпляр SAME. .equals()
возвращает true, если два объекта содержат одни и те же данные equals()
Versus ==
в Java
Это может вам помочь.
Лямбда-выражение в исходном коде фактически не компилируется непосредственно в объект; это скорее инструкция к среде выполнения для создания лямбды. У JVM есть много свободы относительно лямбд; так что, возможно, речь о предметах неприменима в этом контексте.
Фактическое число создаваемых объектов сильно зависит от тела лямбды и реализации JVM.
В JLS § 15.27.4 упоминается следующее:
blockquote>
- Новый объект не обязательно размещать при каждой оценке.
- Объекты, созданные различными лямбда-выражениями, не обязательно должны принадлежать разным классам (например, если тела идентичны).
- Каждый объект, полученный в результате оценки, не обязательно должен принадлежать одному и тому же классу (например, захваченные локальные переменные могут быть встроены).
- Если «существующий экземпляр» доступен, его не нужно было создавать при предыдущей лямбда-оценке (например, он мог быть выделен во время инициализации окружающего класса).
См .:
- Комментарий Брайана Гетца к посту Stackoverflow о лямбдах
- Ответ Хольгера [ 112] на тот же пост
- Более подробный пост на другой вопрос