Nuestro team redactor ha pasado mucho tiempo buscando la respuesta a tus interrogantes, te compartimos la respuesta por eso esperamos serte de mucha ayuda.
Solución:
en Java, el tipo ‘int’ es un primitivo, mientras que el tipo ‘Integer’ es un objeto.
Cª#, el tipo ‘int’ es el mismo que System.Int32
y es un tipo de valor (es decir, más como java ‘int’). Un número entero (al igual que cualquier otro tipo de valor) se puede encuadrar (“envolver”) en un objeto.
Las diferencias entre objetos y primitivas están algo más allá del alcance de esta pregunta, pero para resumir:
Objetos proporcionan facilidades para el polimorfismo, se pasan por referencia (o, más exactamente, se pasan las referencias por valor) y se asignan desde el montón. En cambio, primitivos son tipos inmutables que se pasan por valor y, a menudo, se asignan desde la pila.
Bueno, en Java un int es un primitivo mientras que un Integer es un Objeto. Es decir, si hiciste un nuevo Integer:
Integer i = new Integer(6);
Podrías llamar a algún método en i:
String s = i.toString();//sets s the string representation of i
Mientras que con un int:
int i = 6;
No puede llamar a ningún método porque es simplemente un primitivo. Asi que:
String s = i.toString();//will not work!!!
produciría un error, porque int no es un objeto.
int es uno de los pocos primitivos en Java (junto con char y algunos otros). No estoy 100% seguro, pero creo que el objeto Integer más o menos solo tiene una propiedad int y un montón de métodos para interactuar con esa propiedad (como el método toString(), por ejemplo). Entonces Integer es una forma elegante de trabajar con un int (al igual que String es una forma elegante de trabajar con un grupo de caracteres).
Sé que Java no es C, pero como nunca he programado en C, esto es lo más cerca que pude llegar a la respuesta. ¡Espero que esto ayude!
javadoc de objeto entero
Integer Ojbect vs. int comparación primitiva
Agregaré a las excelentes respuestas dadas anteriormente, y hablaré sobre el boxeo y el desempaquetado, y cómo esto se aplica a Java (aunque C # también lo tiene). Usaré solo la terminología de Java porque soy más familiarizado con ese.
Como las respuestas mencionadas, int
es solo un número (llamado sin caja tipo), mientras que Integer
es un objeto (que contiene el número, por lo tanto un en caja tipo). En términos de Java, eso significa (aparte de no poder llamar a métodos en int
), no puede almacenar int
u otros tipos que no son objetos en colecciones (List
, Map
, etc.). Para poder almacenarlos, primero debe encajonarlos en su tipo de encajonado correspondiente.
Java 5 en adelante tiene algo llamado boxeo automático y desembalaje automático que permiten hacer el boxing/unboxing entre bastidores. Comparar y contrastar: versión de Java 5:
Deque queue;
void add(int n)
queue.add(n);
int remove()
return queue.remove();
Java 1.4 o anterior (tampoco genéricos):
Deque queue;
void add(int n)
queue.add(Integer.valueOf(n));
int remove()
return ((Integer) queue.remove()).intValue();
Cabe señalar que, a pesar de la brevedad de la versión de Java 5, ambas versiones generan bytecode idénticos. Por lo tanto, aunque el auto-boxing y auto-unboxing son muy convenientes porque escribe menos código, estas operaciones hacer sucede detrás de escena, con los mismos costos de tiempo de ejecución, por lo que aún debe estar al tanto de su existencia.
¡Espero que esto ayude!