Saltar al contenido

¿Cuál es la diferencia entre Long.valueOf (0) y 0L en Java?

Solución:

Nada.

Long b = 0L;

se someterá a autoboxing. El compilador lo reemplaza con:

Long b = Long.valueOf(0L);

Puede ver esto si descompila su clase, por ejemplo, usando javap.

void a() {
  Long a = Long.valueOf(0);
}

void b() {
  Long b = 0L;
}

Se descompila para:

  void a();
    Code:
       0: lconst_0
       1: invokestatic  #2                  // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
       4: astore_1
       5: return

  void b();
    Code:
       0: lconst_0
       1: invokestatic  #2                  // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
       4: astore_1
       5: return

Entonces, ¿cómo es mejor inicializar una variable, considerando el consumo de memoria y la complejidad del tiempo?

Debido a que son semánticamente idénticos, el consumo de memoria y la complejidad del tiempo también son idénticos.

En cambio, concéntrese en lo que es realmente importante, que es legibilidad: utilice el que usted (y otros) encontrará más fácil de entender de un vistazo.

Como han señalado otros, Long l = Long.valueOf(0) y Long l = 0L compilará en el mismo código de bytes, la única diferencia es el estilo y la legibilidad.

Adicionalmente..

Es un poco tonto preocuparse por la complejidad del tiempo por algo como esto: ambas expresiones son tiempo constante. usted generalmente solo hable de la complejidad del tiempo cuando actúe sobre colecciones de datos, no solo sobre una sola pieza de datos.

En cuanto al consumo de memoria, no usan 64 bits como dices; Es lo primitivo long tipo que normalmente usa 64 bits pero Long (el tipo contenedor) usa más memoria que el tipo primitivo porque necesita esa memoria para cosas relacionadas con objetos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *