¿Cuál es la diferencia entre Integer e int en Java?

248

Por ejemplo, ¿por qué puedes hacer:

int n = 9;

Pero no:

Integer n = 9;

Y puedes hacer:

Integer.parseInt("1");

Pero no:

int.parseInt("1");
mino
fuente
35
entero es clase, int es un tipo primitivo
Anycorn
24
Usted puede hacer Integer n = 9;debido a autoboxing (a menos que esté utilizando una versión muy antigua de Java)
Alderath

Respuestas:

320

intEs un tipo primitivo. Las variables de tipo intalmacenan el valor binario real para el entero que desea representar. int.parseInt("1")no tiene sentido porque noint es una clase y por lo tanto no tiene ningún método.

Integeres una clase, no diferente de ninguna otra en el lenguaje Java. Las variables de tipo Integeralmacenan referencias a Integerobjetos, al igual que con cualquier otro tipo de referencia (objeto). Integer.parseInt("1")es una llamada al método estático parseIntdesde la clase Integer(tenga en cuenta que este método en realidad devuelve un inty no un Integer).

Para ser más específicos, Integeres una clase con un solo campo de tipo int. Esta clase se usa cuando necesita intque se lo trate como a cualquier otro objeto, como en tipos genéricos o situaciones en las que necesita nulabilidad.

Tenga en cuenta que cada tipo primitivo en Java tiene una clase de contenedor equivalente :

  • byte tiene Byte
  • short tiene Short
  • int tiene Integer
  • long tiene Long
  • boolean tiene Boolean
  • char tiene Character
  • float tiene Float
  • double tiene Double

Las clases de envoltura heredan de la clase Object y las primitivas no. Por lo tanto, se puede utilizar en colecciones con referencia a objetos o con genéricos.

Desde java 5 tenemos autoboxing, y la conversión entre primitiva y clase de envoltura se realiza automáticamente. Sin embargo, tenga cuidado, ya que esto puede introducir errores sutiles y problemas de rendimiento; ser explícito sobre las conversiones nunca está de más.

Darkhogg
fuente
66
En C#todos los tipos de datos tienen "alias" y int.Parse()tiene sentido (aunque realmente no lo tiene)
Vahid Amiri
22
@ VSG24 ... pero esta fue una pregunta de Java, y esta es una respuesta de Java. C#Es completamente irrelevante aquí.
Darkhogg
3
Un buen ejemplo podría ser: Error de compilación: List <int> Válido: List <Integer>
hagai
El conocimiento adicional siempre se beneficia
sumit sharma
1
Me gusta aprender cosas nuevas, especialmente cuando el conocimiento está relacionado con el tema actual. Gracias vahid
Paul Oliver
30

Integer es una clase e int es un tipo primitivo.

Siga leyendo en estos enlaces:

Matjaz Muhic
fuente
1
Quiero señalar, creo que esta es la respuesta perfecta por dos razones: 1- Conciso y preciso, teniendo en cuenta a la audiencia / persona que pregunta 2- Proporciona instrucciones para detalles adicionales en lugar de ponerlo todo en el texto de la respuesta No todos las preguntas se pueden responder de manera precisa y concisa (algunas requieren muchos más detalles y matices para ser precisas y completas), pero creo que todas las respuestas deberían intentar ser así de simples y directas.
DRich
11
Je, creo que es todo lo contrario. "int es un tipo primitivo" no te dice nada, si no sabes qué es un tipo primitivo. (Y si lo hace, probablemente ya sepa la diferencia entre int e Integer). Y enviar al lector a dos enlaces etiquetados "Enlace 1" y "Enlace 2" es bastante inútil, especialmente en comparación con solo citar las secciones relevantes.
Steve Bennett
7

Un número entero es prácticamente solo un contenedor para el tipo primitivo int. Le permite utilizar todas las funciones de la clase Integer para facilitarle la vida.

Si eres nuevo en Java, algo que debes aprender a apreciar es la documentación de Java. Por ejemplo, todo lo que desee saber sobre la clase entera se documenta en detalle.

Esto es directamente de la documentación para la clase Integer:

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

Nadir Muzaffar
fuente
77
Esto pierde un poco el punto. Por ejemplo, como Integeres una clase, se puede almacenar en contenedores (a diferencia de los tipos primitivos).
Oliver Charlesworth
6

Una variable int contiene un valor entero con signo de 32 bits. Un número entero (con mayúscula I) contiene una referencia a un objeto de tipo entero (clase) o nulo.

Java lanza automáticamente entre los dos; de Integer a int cada vez que el objeto Integer ocurre como argumento para un operador int o se asigna a una variable int, o se asigna un valor int a una variable Integer. Este casting se llama boxeo / unboxing.

Si una variable entera que hace referencia a un valor nulo no está en caja, explícita o implícitamente, se genera una excepción NullPointerException.

(En el texto anterior, el término "variable" significa variable local, campo o parámetro)

Bartłomiej Semańczyk
fuente
5

Integerse refiere al tipo de envoltura en Java, mientras que intes un tipo primitivo. Todo excepto los tipos de datos primitivos en Java se implementan como objetos que implican que Java es un lenguaje de programación orientado a objetos puro altamente calificado. Si lo necesita, todos los tipos primitivos también están disponibles como tipos de contenedor en Java. Puede tener algún beneficio de rendimiento con los tipos primitivos y, por lo tanto, los tipos de contenedor solo deben usarse cuando sea necesario.

En su ejemplo como a continuación.

Integer n = 9;

la constante 9se está encuadrando automáticamente ( auto-boxingy unboxingocurre automáticamente de java 5adelante en adelante) Integery, por lo tanto, puede usar la declaración de esa manera y también Integer n = new Integer(9). Esto se logra realmente a través de la declaraciónInteger.valueOf(9).intValue();

León
fuente
3

int es un tipo primitivo y no un objeto. Eso significa que no hay métodos asociados con él. Integer es un objeto con métodos (como parseInt).

Con el nuevo java hay funcionalidad para el auto boxing (y unboxing). Eso significa que el compilador insertará Integer.valueOf (int) o integer.intValue () donde sea necesario. Eso significa que en realidad es posible escribir

Integer n = 9;

que se interpreta como

Integer n = Integer.valueOf(9);
Roger Lindsjö
fuente
3

Integer es una clase / objeto contenedor y int es de tipo primitivo. Esta diferencia desempeña un papel importante cuando desea almacenar valores int en una colección, ya que solo aceptan objetos como valores (hasta jdk1.4). JDK5 en adelante debido al autoboxing es una historia completamente diferente.

kosa
fuente
55
JDK5 + también solo acepta objetos; es solo que el autoboxing le permite al compilador llamar automáticamente Integer.valueOf(i)o Integer.intValue()por usted. Collection<int>Todavía no funcionará. Entonces, no es una historia completamente diferente, es la misma historia, con solo un poco de taquigrafía.
yshavit
convenido. Lo siento, mi redacción podría no reflejar eso.
kosa
3

En Java, int es un tipo de datos primitivo, mientras que Integer es una clase Helper, se usa para convertir un tipo de datos a otro.

Por ejemplo:

         double doubleValue = 156.5d;
         Double doubleObject  = new Double(doubleValue);
         Byte myByteValue = doubleObject.byteValue ();
         String myStringValue = doubleObject.toString();

Los tipos de datos primitivos almacenan la memoria más rápida disponible donde la clase Helper es compleja y se almacena en la memoria de almacenamiento dinámico.

referencia de "David Gassner" Java Essential Training.

Aqeel Haider
fuente
2

intes un tipo primitivo que representa un número entero. mientras que Integeres un objeto que se envuelve int. El Integerobjeto le brinda más funcionalidad, como la conversión a hexadecimal, cadena, etc.

También puede usar conceptos OOP con Integer. Por ejemplo, puede usar Integer para genéricos (es decir ).Collection<Integer>

em
fuente
2

Esto está tomado de Java: la referencia completa, novena edición

Java usa tipos primitivos (también llamados tipos simples), como int o double , para contener los tipos de datos básicos admitidos por el lenguaje. Los tipos primitivos , en lugar de los objetos, se utilizan para estas cantidades en aras del rendimiento . El uso de objetos para estos valores agregaría una sobrecarga inaceptable incluso al más simple de los cálculos. Por lo tanto, los tipos primitivos no son parte de la jerarquía de objetos y no heredan Object .

A pesar del beneficio de rendimiento que ofrecen los tipos primitivos, hay momentos en los que necesitará una representación de objeto. Por ejemplo, no puede pasar un tipo primitivo por referencia a un método . Además, muchas de las estructuras de datos estándar implementadas por Java operan en objetos, lo que significa que no puede usar estas estructuras de datos (específicas de objeto) para almacenar tipos primitivos . Para manejar estas (y otras) situaciones, Java proporciona envoltorios de tipos, que son clases que encapsulan un tipo primitivo dentro de un objeto.

Las clases de contenedor se relacionan directamente con la función de autoboxing de Java . Los contenedores de tipo son Double, Float, Long, Integer, Short, Byte, Character y Boolean . Estas clases ofrecen una amplia gama de métodos que le permiten integrar completamente los tipos primitivos en la jerarquía de objetos de Java.

Teoman shipahi
fuente
1

Para optimizar el tiempo de ejecución del código Java, se han agregado int tipos primitivos que incluyen float, booletc. , pero vienen junto con las clases de contenedor para que, si es necesario, pueda convertirlos y usarlos como objeto Java estándar junto con muchas utilidades que vienen como miembros funciones (como Integer.parseInt("1")).

anand
fuente
1

intes un tipo de datos primitivo, mientras que Integeres un tipo de referencia o envoltura (clase) en Java.

después de lo java 1.5cual introduce el concepto de autoboxing y unboxing puede inicializar ambos into de Integeresta manera.

int a= 9
Integer a = 9 // both valid After Java 1.5.

¿por qué Integer.parseInt("1");pero no int.parseInt("1");?

Integeres una clase definida en la jdkbiblioteca y parseInt()es un método estático que pertenece a la Integerclase

Entonces, Integer.parseInt("1");es posible en Java. pero intes de tipo primitivo (asume como una palabra clave) en java. Entonces, no puedes llamar parseInt()con int.

Vikrant Kashyap
fuente