A veces veo que las API usan longor Longo intor 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 longor Longo intor Integer, y no puedo entender cómo se toma la decisión para eso.
¿Cuándo debo elegir qué?
Respuestas:
Longes la Objectforma de long, y Integeres la forma de objeto deint .
El longutiliza 64 bits . Los intusos 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 longy int, excepto donde necesite usar métodos heredados Object, como hashcode. Java.util.collectionslos métodos usualmente usan las Objectversiones en caja ( envueltas), porque necesitan funcionar para cualquiera Object, y un tipo primitivo, como into long, no es unObject .
Otra diferencia es que longy intson valores de paso por valor , mientras que Longy Integerson valores de paso por referencia , como todos los tipos Java no primitivos. Entonces, si fuera posible modificar un LongoInteger (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 Longo Integerpodría ser null.
Hay un par de cosas que no puedes hacer con un tipo primitivo:
nullvalorObjectsA menos que necesite alguno de esos, debe preferir los tipos primitivos, ya que requieren menos memoria.
int, cuando tenga números.intes demasiado pequeño, use unlonglonges demasiado pequeño, useBigIntegerCollection, manejo null, ...) use Integer/ en su LonglugarUn intes un entero de 32 bits; a longes un número entero de 64 bits. Cuál usar depende de qué tan grandes sean los números con los que espera trabajar.
inty longson tipos primitivos, mientras que Integery Longson 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 inten un Listdirectamente).
Int32 bits (4byte)-2,147,483,648 to 2,147,483,647Long64 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
intque se desbordó cuando se recibieron más de 2,147,483,647 vistas en un video popular. Dado que unIntcontador 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, Shorttambién)
Puede usar inttodo el tiempo, pero Integercontiene 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