Comparar primitivo con objeto contenedor con == comportamiento inexplicable
Tengo un código que necesito entender:
public static void main(String[] args) {
Character c = new Character('a');
Character cy = new Character('a');
char cx = 'a';
System.out.println(c == cx);
System.out.println(cx == cy);
System.out.println(c == cy);
}
Salida:
true
true
false
No puedo entender por qué solo falla la tercera declaración.
EDITAR: Esta pregunta es diferente a la.equals
vs==
pregunta como esta sobre la comparación primitiva versus la comparación de objetos.