Perché nel primo caso tu hai allocato gli oggetti usando new (anche se poi usi lo stesso valore) e la jvm istanzierà per te due oggetti differenti.
Nel secondo caso, tu stai inizializzando c alla costante numerica 1. Lo stesso vale per d. la jvm in questo caso capisce che ti stai riferendo allo stesso oggetto, vede che è una costante numerica e ottimizza creandone una sola (quindi usando un solo riferimento).
Questa è una delle ragioni per cui per il confronto, a meno di usare tipi primitivi, è sempre meglio passare per l'equals!