La razón para Integer, Boolean, etc. es permitir el uso de tipos primitivos en contextos que requieren un tipo de referencia. El caso de uso clásico es la colección de API que proporciona conjuntos, listas, mapas, colas, etc., donde el tipo de elemento debe ser de algún tipo de referencia.
Así puedo escribir:
List<Integer> list = new ArrayList<Integer>();
pero el siguiente es un error de compilación:
List<int> list = new ArrayList<int>();
Tenga en cuenta que este uso de los casos para los tipos de envoltura primitivas anterior a ambos tipos genéricos y la "nueva "API de colecciones, y se remonta a los días en que los únicos tipos de colección eran los formularios originales (pregenéricos) de Vector
y Hashtable
, y su tipo.
Para agregar a la respuesta, un ejemplo práctico será el almacenamiento de variables en el contexto de la sesión en una aplicación web. – saugata
No solo Map, todas las clases de contenedor requieren que sus elementos sean Object, por lo que el tipo primitivo no puede cumplir esta restricción. Y los contenedores, creo, es un aspecto en el que el lenguaje orientado a objetos supera el lenguaje de procedimientos, que le brinda mucha comodidad. :-) –