Потому что иногда это сбивает с толку. Скажем:
Integer start=new Integer(10);
Integer mid=new Integer(10);
Integer end=new Integer(20);
System.out.println(start<end); // gives true
System.out.println(start!=end); // gives true
System.out.println(start==mid); // BAM! gives false
Объекты распаковываются в первых двух строках, но последняя работает так же, она сравнивает ссылку. Разве это не должно распаковывать объекты тоже. Это только упростило бы ситуацию (правильно?), или я что-то упустил?