A veces veo que las API usan long
or Long
o int
or Integer
, y no puedo entender cómo se toma la decisión para eso.
¿Cuándo debo elegir qué?
A veces veo que las API usan long
or Long
o int
or Integer
, y no puedo entender cómo se toma la decisión para eso.
¿Cuándo debo elegir qué?
Respuestas:
Long
es la Object
forma de long
, y Integer
es la forma de objeto deint
.
El long
utiliza 64 bits . Los int
usos de 32 bits, y así sólo pueden contener números de hasta ± 2 mil millones (-2 31 a 2 31 -1).
Debería usar long
y int
, excepto donde necesite usar métodos heredados Object
, como hashcode
. Java.util.collections
los métodos usualmente usan las Object
versiones en caja ( envueltas), porque necesitan funcionar para cualquiera Object
, y un tipo primitivo, como int
o long
, no es unObject
.
Otra diferencia es que long
y int
son valores de paso por valor , mientras que Long
y Integer
son valores de paso por referencia , como todos los tipos Java no primitivos. Entonces, si fuera posible modificar un Long
oInteger
(no lo es, son inmutables sin usar el código JNI), habría otra razón para usar uno sobre el otro.
Una diferencia final es que a Long
o Integer
podría ser null
.
Hay un par de cosas que no puedes hacer con un tipo primitivo:
null
valorObject
sA menos que necesite alguno de esos, debe preferir los tipos primitivos, ya que requieren menos memoria.
int
, cuando tenga números.int
es demasiado pequeño, use unlong
long
es demasiado pequeño, useBigInteger
Collection
, manejo null
, ...) use Integer
/ en su Long
lugarUn int
es un entero de 32 bits; a long
es un número entero de 64 bits. Cuál usar depende de qué tan grandes sean los números con los que espera trabajar.
int
y long
son tipos primitivos, mientras que Integer
y Long
son objetos. Los tipos primitivos son más eficientes, pero a veces necesitas usar objetos; por ejemplo, clases de colección de Java sólo se puede trabajar con objetos, por lo que si necesita una lista de números enteros que tienen para que sea una List<Integer>
, por ejemplo (no se puede utilizar int
en un List
directamente).
Int
32 bits (4byte)
-2,147,483,648 to 2,147,483,647
Long
64 bits (8byte)
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
Si su uso de una variable cae en el rango de 32 bits, use Int
, de lo contrario use long
. Por lo general, se usa mucho tiempo para cálculos científicos y cosas así necesitan mucha precisión. (p. ej. valor de pi).
Un ejemplo de elegir uno sobre el otro es el caso de YouTube. Primero definieron el contador de vistas de video como el
int
que se desbordó cuando se recibieron más de 2,147,483,647 vistas en un video popular. Dado que unInt
contador no puede almacenar ningún valor más que su rango, YouTube cambió el contador a una variable de 64 bits y ahora puede contar hasta 9.223.372.036.854.775.807 vistas. Comprenda sus datos y elija el tipo que se ajuste a una variable de 64 bits que ocupará el doble de memoria que una variable de 32 bits.
Cuando se trata de usar un número muy largo que puede superar los 32 bits para representar, puede usar mucho tiempo para asegurarse de que no tendrá un comportamiento extraño.
Desde Java 5, puede usar las funciones de entrada y salida para hacer que el uso de int e Integer sea completamente el mismo. Significa que puedes hacer:
int myInt = new Integer(11);
Integer myInt2 = myInt;
El dentro y fuera del boxeo le permiten cambiar entre int Entero y sin ninguna conversión adicional (lo mismo para Long
, Double
, Short
también)
Puede usar int
todo el tiempo, pero Integer
contiene algunos métodos auxiliares que pueden ayudarlo a realizar algunas operaciones complejas con enteros (como Integer.parseInt(String)
)
a) clase de objeto "Long" versus tipo primitivo "long". (Al menos en Java)
b) Hay diferentes tamaños de memoria (incluso poco claros) de los tipos primitivos:
Java: todo claro: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
C .. simplemente lío: https://en.wikipedia.org/wiki/C_data_types