Integer A = Integer.valueOf (1), que por sua vez faz o seguinte:
Se -128 <= n <= +127, retorna um Integer obtido de um array de Integer que é pré-alocado no início do programa.
Se n < -128 ou n > +127, retorna um new Integer(n).
A partir daí você pode ficar brincando de contar objetos (que coisa mais inútil… )
No link abaixo vc encontra um aplicativo bastante interessante ele mostra para onde estao sendo apontados as variaveis de referencia
e quantos objetos foram criados . http://www.bluej.org/
pois é, o Integer.valueOf nesse caso vai retornar uma referencia para o mesmo objeto do cache, fazendo com que nenhum objeto seja criado (apenas durante a primeira vez de todas). Esse tipo de pergunta é meio pegadinha por causa desse cache.