2011-01-07 9 views
16

¿Cuál es el mejor en programación - int o Integer? Especialmente cuando ambos están haciendo la misma tarea?Comparación de rendimiento de int y entero

Estoy escribiendo una aplicación en Java. En la mayoría de los lugares de tipos de datos primitivos, uso int; y para objetos, uso Integer. Así que estoy confundido, cuál es el mejor en los lugares, donde tenemos que usar objetos.

De acuerdo con el rendimiento, ¿cuál es el mejor para una aplicación Java?

Respuesta

21

Use int cuando sea posible, y use Integer cuando sea necesario. Como int es un primitivo, será más rápido. Las JVM modernas saben cómo optimizar Integer s usando el auto-boxeo, pero si está escribiendo código de rendimiento crítico, int es el camino a seguir.

Eche un vistazo a this y this artículo. Aunque no debes tratarlos como verdades absolutas, muestran que los objetos serán más lentos que sus contrapartes primitivas.

Por lo tanto, use int siempre que sea posible (me repetiré: si está escribiendo código de rendimiento crítico). Si un método requiere un Entero, utilícelo en su lugar.

Si no le importa el rendimiento y quiere hacer todo de forma orientada a objetos, use Integer.

+0

Gracias por Su respuesta – DJJ

+4

El rendimiento no es lo único a tener en cuenta. int usará menos memoria que Integer (aproximadamente un Integer toma el doble de memoria). Si está tratando con muchos números, esto puede hacer una diferencia sustancial –

+1

Los enlaces en la respuesta están rotos, [aquí está] (http://openwritings.net/content/public/java/performance-primitive-data-type-vs- object-data-type) el enlace actual al segundo artículo. Una cosa a tomar del artículo es que cuando se considera el rendimiento, para muchos casos de uso la diferencia entre usar int y entero no será la clave. A menos que tenga que lidiar con una gran cantidad de enteros o cálculos. – neilireson

3

int primitivo, normalmente debería ser más rápido. Solo lleva los datos del número sin procesar.

Integer es un objeto, lleva algunas cosas adicionales para que, por ejemplo, puede poner el número en listas.

1

int es primitivo, entero es un int envuelto como un objeto.

Realmente depende de cómo va a utilizarlos.

6

Utilice int siempre que sea posible. Use Integer solo si:

  • Necesita una forma de representar "sin valor" o "sin inicializar". Integer puede ser null, un int siempre tiene un valor int.
  • Desea utilizar colecciones como List (aunque puede usar int externamente y tener autoboxing ocultar el hecho de que la colección almacena internamente Integer instancias).
  • Está utilizando una API, un marco o una herramienta que requiere que use Integer o Object, o no funciona con tipos primitivos.
  • Necesita poder sincronizar en el objeto (muy poco probable).
+0

¿Siguen siendo válidas hoy en día estas recomendaciones? Estoy haciendo un trabajo bastante pesado relacionado con la deserialización de JSON y tengo problemas para encontrar una estrategia para representar campos no inicializados (opcionales). Haré una pregunta por separado si es más apropiado. – NathanChristie

+0

Hoy en día, uno preferiría usar 'OptionalInt' y su' .empty() 'para" sin valor ". – glglgl

1

Como una vista alternativa .... quizás no deba usar Integer ni int.

Si el valor es realmente un objeto con comportamiento, como por ejemplo, una cantidad de dinero, una distancia o algo así, entonces tal vez debería utilizar un objeto con comportamiento.

Se puede ver más información sobre este tipo de cosas aquí:

http://www.time4tea.net/wiki/display/MAIN/Microtypes

Aunque esto puede ser "más lento", el tipo de seguridad adicional hará que la programación, prueba y depuración de su sistema mucho más fácil & Más rápido.

Cuestiones relacionadas