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.