Por que os números inteiros não são armazenados em cache em Jav

Eu sei que existemsimilar posts no tópico, mas eles não atendem bem à minha pergunta. Quando você faz

Integer a = 10;
Integer b = 10;
System.out.println("a == b: " + (a == b));

Isso (aparentemente) imprimirátrue na maioria das vezes porque números inteiros no intervalo [-128, 127] são de alguma forma armazenados em cache. Mas

Integer a = new Integer(10);
Integer b = new Integer(10);
System.out.println("a == b: " + (a == b));

Retornaráfalse. Entendo que estou solicitando novas instâncias de um número inteiro, mas como as primitivas in a box são imutáveis em Java e o mecanismo já está lá para fazer a "coisa certa" (como visto no primeiro caso), por que isso acontece?

Não faria mais sentido se todas as instâncias de um número inteiro com 10 fossem o mesmo objeto na memória? Em outras palavras, por que não temos "Integer interno", que seria semelhante a "String interning"?

elhor ainda, não faria mais sentido se ocorrências de uma primitiva em caixa representando a mesma cois independentemente do valor (e tipo), seja o mesmo objeto? Ou pelo menos responda corretamente a==?

questionAnswers(15)

yourAnswerToTheQuestion