2010-05-21 13 views
5

¿Puede alguien explicarme el uso de Integer, Boolean, etc. en lugar de sus tipos primitivos en JAVA?Objeto o tipo primitivo

Parece que no entiendo las ventajas que están proporcionando. Parecen crear problemas innecesarios de manejo de valores nulos.

Gracias!

Respuesta

8

Boolean, Integer, Long, ... son Objetos. Puede usarlos en lugares donde no puede usar tipos primitivos, p.

  • almacenándolos en una colección como una Map
  • utilizarlos como parámetro de plantilla
  • asignándoles un valor null
  • uso de ellos de una manera más general (por ejemplo, Long como Number)

Ejemplos:

new ArrayList<Integer>(); 
Long id = null; 
Number num = new Long(3); 
+0

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

+0

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. :-) –

4

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.

4

A veces realmente necesita un valor para ser anulable, por ejemplo, si su aplicación almacena datos de usuario, un número de seguridad social puede ser desconocido. En ese caso, es más limpio almacenar null en lugar de -1.

También hay cosas que no se pueden hacer con tipos primitivos, como almacenarlos en un mapa o usar polimorfismo (el doble y el entero son instancias de número).

1

primitivas son siempre más rápidas.
Sin embargo, hay veces, cuando los objetos son realmente útiles:
1. upcasting. Su función puede tomar el Número (es un padre para todos los objetos numéricos: Entero, Flotante, etc.) para un argumento.
2. Posible valor nulo. Por ejemplo, se usa mientras se almacena en la base de datos. El objeto puede ser nulo, las primitivas deben tener valor. Entonces si el campo en db es nulable, es mejor usar la versión del objeto del valor primitivo.
3. Si la función toma el objeto y siempre le da una primitiva, hay gastos en el autoboxing (convirtiendo la primitiva en objeto). Lo mismo para regresar de la función.
4. Los objetos tienen ciertos métodos, como getHashcode(), toString() etc., que en algunos casos pueden ser realmente útiles.

Cuestiones relacionadas