Perché da java 1.5 i tipi primitivi vengono automaticamente boxati nel corrispettivo wrapper

lista1.add(2);

equivale a

lista1.add(new Integer(2));