Usando int vs Integer

Encontré una clase que usa variables enteras para capturar el tamaño que se usará en un bucle for. ¿Es esta una buena práctica o deberíamos usar el tipo de datos prim prim?

Integer size = something.getFields().size(); for (Integer j = 0; j < size - 1; ++j) 

la clase Integer se proporciona para que los valores se puedan guardar en cajas / unboxed en una forma OO pura. use int cuando sea apropiado a menos que necesite específicamente usarlo de una manera OO; en cuyo caso, entero es apropiado.

Java Int vs Integer

Sin embargo, cosas muy diferentes están pasando debajo de las coberturas aquí. Un int es un número; an> Integer es un puntero que puede hacer referencia a un objeto que contiene un número.

Un int no es un objeto y no se puede pasar a ningún método que requiera objetos. Un caso común es el uso de las clases de colección proporcionadas (Lista, Mapa, Conjunto), aunque es posible escribir versiones de estas clases que proporcionan capacidades similares a las versiones de objeto. Las clases contenedoras (Entero, Doble, etc.) se requieren con frecuencia siempre que se usa la introspección (como en la API de reflexión).

Una mejor descripción de cuándo usar uno frente a otro:

Elegir entre int y entero

Comenzaré con cómo deben usarse estos tipos antes de entrar en detalles sobre por qué.

  • Prefiere int por razones de rendimiento
  • Los métodos que toman objetos (incluidos los tipos generics como List ) requerirán implícitamente el uso de Integer.
  • El uso de Integer es relativamente barato para valores bajos (-128 a 127) debido a la internación. Usa Integer.valueOf(int) y no New Integer (int)
  • No use == o != Con tipos enteros
  • Considere usar Integer cuando necesite representar la ausencia de un valor (nulo)
  • Cuidado con el desempaquetado de valores enteros para int con valores nulos

Si puedes usar int hazlo. Si el valor puede ser null o se usa como un Objeto, por ejemplo, Genéricos, use Integer

Por lo general, no importa cuál use pero a menudo int comporta un poco mejor.

Este enfoque no es bueno en la práctica, use int siempre que sea posible. El uso de Integer indica que esta variable en particular puede ser null (o estaba dentro de una colección, malditos generics …), que no es el caso.

Además, el uso de Integer introduce una sobrecarga adicional de boxeo y desempaquetado.

Este es un desastre potencial que espera suceder en grandes proyectos. El codificador aquí olvidó que cada entero es en realidad un objeto nuevo y, para usarlo como int, tiene que haber boxeo y unboxing todo el tiempo. No solo es ineficiente, sino que tampoco se ejecutará como se espera. Se recomienda utilizar siempre int siempre que sea posible, y solo utilizar entero para colocar estos valores en listas, contenedores o para el almacenamiento de la base de datos. Recuerde, comparar objetos usando>,

Promueva los tipos primitivos siempre que sea posible.

los tipos primitivos no se pueden usar como GenericArgument o null.

No lo uses solo para loop. Utilice el tipo primitivo int (mejor rendimiento), que no es lo mismo que el entero de clase.

La clase Entero envuelve un valor del tipo primitivo int en un objeto. Un objeto de tipo entero contiene un solo campo cuyo tipo es int.

Además, esta clase proporciona varios métodos para convertir un int a un String y un String a un int, así como otras constantes y métodos útiles cuando se trata de un int.

Por lo tanto, use Integer si necesita llamar a las funciones Integer o necesita asignarle un valor nulo.

También necesitará usar Integer en lugar de int para generics como List

Cuando hay necesidad de usar objetos, debe usar las clases Wrapper, como Integer, Double, Float, etc …

p.ej:

  int n = Integer.parseInt("10"); 

Aquí estamos convirtiendo la cadena en un entero (tipo Primitivo), pero el método parseInt (String str) solo funciona en las clases de Contenedor (es decir, Objeto), así que lo usamos … encontrará muchos más usos en Java.

Puede haber una penalización de rendimiento debido al boxeo y al desempaquetado, ya que se incurre en la sobrecarga de conversión entre un tipo primitivo y uno de referencia.

Sin embargo, la clase Integer agrega métodos adicionales que pueden ser muy útiles.

Normalmente uso enteros por puramente OO. El rendimiento de int es definitivamente mucho mejor que su homólogo de objeto, pero solo se nota cuando estás repitiendo millones de veces en el ciclo.

En mi humilde opinión, si el rendimiento es de sum importancia en su aplicación y desea exprimir incluso un solo nano segundo, entonces utilice int sin ningún cerebro. Pero si OO y la legibilidad son las principales afectadas, entonces use Integer.