Por que é permitido adicionar tipos de dados primitivos a uma ArrayList?

Eu entendo que é possível adicionar um objeto inteiro a umArrayList do tipoInteger. Isso faz sentido para mim. Como isso:

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(3));

Mas por que é possível adicionar um tipo de dados primitivo como int em vez deInteger? Como isso:

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(3);

Por que isso é permitido?

questionAnswers(1)

yourAnswerToTheQuestion