Después de leer el material, entendí que cuando imprimimos un objeto directamente en Java, lo que vemos (como MiClase@123a45b) es la representación que Java hace de la dirección de memoria del objeto en el heap. Esto me ayuda a comprender que:
Cada objeto tiene un identificador único que permite diferenciarlo de otros en memoria
Esta representación es útil para debugging, ya que puedo identificar específicamente qué instancia estoy manejando
La comparación con '==' usa estas referencias para ver si dos variables apuntan al mismo objeto
Me queda claro que si quiero mostrar el contenido real del objeto, debo sobrescribir el método toString() en mi clase. ¡Gracias por la explicación, ahora entiendo mejor cómo Java maneja los objetos en memoria!