¿Por qué se permite agregar tipos de datos primitivos a un ArrayList?

Entiendo que es posible agregar un Objeto Integer a unArrayList de tipoInteger. Eso tiene sentido para mí. Me gusta esto:

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

Pero, ¿por qué es posible agregar un tipo de datos primitivo como int en lugar deInteger? Me gusta esto:

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

¿Por qué se permite eso?

Respuestas a la pregunta(1)

Su respuesta a la pregunta