Сравнение примитива с объектом-оболочкой с необъяснимым поведением ==

У меня есть кусок кода, который мне нужно понять:

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);
}

Выход:

true
true
false

Я не могу понять, почему только третье утверждение не выполняется.

РЕДАКТИРОВАТЬ: Этот вопрос отличается от.equals против== вопрос как это о примитивном сравнении с объектом.

Ответы на вопрос(1)

Ваш ответ на вопрос