Long vs Integer, long vs int, ¿qué usar y cuándo?

6 minutos de lectura

avatar de usuario
Sé marcar la V

A veces veo el uso de API long o Long o int o Integery no puedo entender cómo se toma la decisión para eso?

¿Cuándo debo elegir qué?

avatar de usuario
borealida

Long es el Object forma de longy Integer es la forma de objeto de int.

los long usos 64 bits. los int utiliza 32 bits, por lo que solo puede contener números de hasta ±2 mil millones (-231 a +231-1).

Deberías usar long y intexcepto cuando necesite utilizar métodos heredados de Objectcomo hashcode. Java.util.collections los métodos generalmente usan el recuadro (Object-wrapped), porque necesitan funcionar para cualquier Objecty un tipo primitivo, como int o longno es un Object.

Otra diferencia es que long y int son paso por valormientras Long y Integer son valor de paso por referencia, como todos los tipos de Java no primitivos. Entonces, si fuera posible modificar un Long o Integer (no lo es, son inmutables sin usar el código JNI), habría otra razón para usar uno sobre el otro.

Una última diferencia es que un Long o Integer podría ser null.

  • @Borealid, esto está muy mal, Java siempre pasa por valor, no hay nada como pasar por referencia en Java.

    – Diego Ramos

    4 de julio de 2018 a las 15:03

  • ¿UH Huh? Bien, exploremos la idea de que Java nunca pasa una referencia. Si llamo a una función dándole un int[2], y luego dentro de la función cambio el valor contenido en el primer elemento de esa matriz, ¿la persona que llama a la función verá ese cambio? ¿Sí? Bueno, eso se debe a que lo que se pasó a la función no fueron los valores de la matriz, sino una referencia a esos valores. “Pasar por valor” significa que los datos reales se están copiando sin direccionamiento indirecto. Quienquiera que te haya enseñado que Java era una pasada por valor, te hizo un flaco favor.

    – Boréalida

    4 de julio de 2018 a las 21:12

  • @Borealid es incorrecto, el valor cambió porque se creó una nueva copia de la referencia a la matriz, es por eso que quien llame a la función verá el cambio, esto todavía pasa por valor. No puedo creer que digas que hay pase por referencia en Java. Nunca pasas la referencia original a la función.

    – Diego Ramos

    5 de julio de 2018 a las 0:06


  • En un mundo teórico en el que Java se comportaba de manera completamente diferente a como lo hace realmente, y pasar un objeto o una matriz a una función daba como resultado una copia totalmente separada (donde las modificaciones dentro de la función no se reflejaban en absoluto para las personas que llamaban), ¿cómo haría usted entonces? describir el lenguaje? Teniendo en cuenta que de lo que estamos hablando no es lo que realmente hace Java.

    – Boréalida

    5 de julio de 2018 a las 11:19

  • @DiegoRamos tiene razón. Java siempre pasa por valor, la confusión se crea porque el valor cuando no es primitivo es una referencia de memoria, el intercambio estático no funciona en Java, más detalles aquí: journaldev.com/3884/…

    – Pantro

    27 de enero de 2019 a las 22:17

Hay un par de cosas que no puedes hacer con un tipo primitivo:

  • Tener un null valor
  • sincronizar en ellos
  • Úselos como parámetro de tipo para una clase genérica y relacionado con eso:
  • Pasarlos a una API que funcione con Objects

A menos que necesite alguno de esos, debe preferir los tipos primitivos, ya que requieren menos memoria.

  • Por defecto usa un intal sostener números.
  • Si el rango de int es demasiado pequeño, utilice un long
  • Si el rango de long es demasiado pequeño, utilice BigInteger
  • Si necesita manejar sus números como objetos (por ejemplo, al ponerlos en un Collectionmanipulación null…) usar Integer/Long en cambio

avatar de usuario
Todo Іѕ Vаиітy

Entero es un tipo entero de 32 bits con signo

  • Denotado como Int
  • Tamaño = 32 bits (4byte)
  • Puede contener enteros de rango -2,147,483,648 to 2,147,483,647
  • el valor predeterminado es 0

### **Largo** es un tipo entero de 64 bits con signo

  • Denotado como Long
  • Tamaño = 64 bits (8byte)
  • Puede contener enteros de rango -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
  • el valor predeterminado es 0L

Si su uso de una variable cae en el rango de 32 bits, use `Int`, de lo contrario use `long`. Por lo general, long se usa para cálculos científicos y cosas así que necesitan mucha precisión. (por ejemplo, valor de pi).

Un ejemplo de elección de uno u otro es el caso de YouTube. Primero definieron el contador de vistas de video como un int el cual se desbordó cuando se recibieron más de 2,147,483,647 vistas a un video popular. Desde un Int 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, como La variable de 64 bits ocupará el doble de memoria que una variable de 32 bits.

Un int es un entero de 32 bits; a long es un 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, las clases de colección de Java solo pueden funcionar con objetos, por lo que si necesita una lista de enteros, debe convertirla en un List<Integer>por ejemplo (no puede usar int en un List directamente).

avatar de usuario
Afortunado

Cuando se trata de usar un número muy largo que puede exceder los 32 bits para representarlo, puede usar long para asegurarse de que no tendrá un comportamiento extraño.

A partir de Java 5, puede utilizar las funciones de in-boxing y out-boxing para que el uso de int e Integer sea completamente el mismo. Significa que puedes hacer:

int myInt = new Integer(11);
Integer myInt2 = myInt;

El cuadro de entrada y salida le permite cambiar entre int y Integer sin ninguna conversión adicional (lo mismo para Long,Double,Short también)

Puedes utilizar int todo el tiempo, pero Integer contiene algunos métodos auxiliares que pueden ayudarlo a realizar algunas operaciones complejas con números enteros (como Integer.parseInt(String) )

a) Clase de objeto “Largo” versus tipo primitivo “largo”. (Al menos en Java)

b) Hay diferentes (incluso poco claros) tamaños de memoria de los tipos primitivos:

Java – todo claro: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

  • byte, carácter .. 1B .. 8b
  • ent corto .. 2B .. 16b
  • int .. .. .. .. 4B .. 32b
  • entero largo .. 8B .. 64b

C .. solo desorden: https://en.wikipedia.org/wiki/C_data_types

  • corto .. .. 16b
  • int.. .. .. 16b… wtf?!?!
  • largo .. .. 32b
  • largo largo.. 64b.. lío! :-/

  • Esto no responde la pregunta, que trata sobre la diferencia entre Long y long, etc.

    – GreenAsJade

    14 de enero de 2019 a las 9:10

  • No, no lo responde explícitamente, no dice explícitamente la diferencia entre tipos primitivos y objetos de tipo de datos, de hecho @GreenAsJade, porque la pregunta anterior no establece ningún idioma específico. Así que proporcioné una comparación, para que todos puedan verificar la diferencia. (a partir de los datos duros, tal como se proporciona)

    – Franta

    3 de septiembre de 2019 a las 0:15


  • La pregunta decía Java.

    – GreenAsJade

    4 de septiembre de 2019 a las 2:00

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad