В чем разница между поверхностным и глубоким равенством? Как это применимо к кэшированию?

В своих заметках я обнаружил следующее, но не могу в этом разобраться:

Классы-оболочки примитивных типов реализуют кэширование для ограниченного числа значений.
Это гарантирует, что ограниченное количество глубоко одинаковых объектов оболочки также неглубоко равны: Если o1.equals (o2) , то o1 == o2 .
Например, новое целое число (0) == новое целое число (0) .
В общем, это не всегда работает.
Например, новое целое число (666) == новое целое число (666)
может не выдержать.
Причина кеширования в том, что оно экономит память.
В общем, кеширование работает для «малых» примитивных значений.

Я не понимаю, что имеется в виду, или в чем разница между глубоким (.equals ()) и мелким (==) равенством. На практике я знаю, что .equals нужно использовать для объектов и == для интегральных значений, но фактическое объяснение этого намекает на меня.

Я предполагаю, что мелкие имена могут просто проверять, что оба значения относятся к одному типу и имя, которое глубоко проверяет, что обе переменные указывают на один и тот же объект? Однако я не понимаю, как кеширование может быть здесь задействовано или почему оно может быть полезно.

6
задан Joachim Sauer 18 April 2011 в 13:30
поделиться