2 回答
TA贡献1719条经验 获得超6个赞
没有什么。
Long b = 0L;
将进行自动装箱。编译器将其替换为:
Long b = Long.valueOf(0L);
如果你反编译你的类,你可以看到这一点,例如使用javap.
void a() {
Long a = Long.valueOf(0);
}
void b() {
Long b = 0L;
}
反编译为:
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
那么在考虑内存消耗和时间复杂度的情况下,如何更好地初始化一个变量呢?
因为它们在语义上是相同的,所以内存消耗和时间复杂度也相同。
相反,专注于真正重要的东西,即可读性:使用你(和其他人)一目了然会发现最容易理解的。
TA贡献1111条经验 获得超0个赞
正如其他人指出的那样,Long l = Long.valueOf(0)
将Long l = 0L
编译为相同的字节码,唯一的区别是风格和可读性。
此外..
为这样的事情担心时间复杂度有点傻:两个表达式都是常数时间。在处理数据集合而不仅仅是单个数据时,您通常只谈论时间复杂度。
至于内存消耗,他们没有像你说的那样使用64位;long
它是通常使用 64 位的原始类型,但Long
(包装类型)使用比原始类型更多的内存,因为它需要该内存用于与对象相关的内容。
添加回答
举报