¿Cuál es la diferencia entre ser superficial y profundamente igual? ¿Cómo se aplica esto al almacenamiento en caché?

Encontré lo siguiente en mis notas, pero no puedo entenderlo:

as clases de contenedor de tipo primitivo implementan el almacenamiento en caché para un número limitado de valores.
Esto garantiza que un número limitado de objetos envolventes profundamente iguales también son poco iguales: sio1.equals( o2 ) luegoo1 == o2.
Por ejemplo,new Integer( 0 ) == new Integer( 0 ).
En general, esto no siempre funciona.
Por ejemplo, nuevo entero (666) == nuevo entero (666)
may not hold.
a razón del almacenamiento en caché es que ahorra memoria.
En general, el almacenamiento en caché funciona para valores primitivos "pequeños".

No entiendo qué se entiende por esto, o cuál es la diferencia entre un igual profundo (.equals ()) y superficial (==). Sé que en la práctica, .equals debe usarse para objetos y == para valores integrales, pero el razonamiento real para esto me alude.

Asumo por los nombres que superficial quizás solo verifique que ambos valores sean del mismo tipo y nombre, ¿qué controles profundos indican que ambas variables apuntan al mismo objeto? Sin embargo, no veo cómo entraría en juego el almacenamiento en caché o por qué sería útil.

Respuestas a la pregunta(5)

Su respuesta a la pregunta