我想知道使用Long.valueOf(0);和0L的区别。是一样的吗?
我知道这两者都是长型,所以在Java 8中它们的内存消耗是64位。
那么,考虑到内存消耗和时间复杂性,如何更好地初始化变量呢?
Long a = Long.valueOf(0);
或
Long b = 0L;
发布于 2019-05-28 13:48:43
没什么。
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那么,考虑到内存消耗和时间复杂性,如何更好地初始化变量呢?
由于它们在语义上是相同的,所以它们的内存消耗和时间复杂度也是相同的。
相反,专注于什么是真正重要的,也就是可读性:使用你(和其他人)会发现最容易理解的东西。
发布于 2019-05-28 14:18:14
正如其他人所指出的,Long l = Long.valueOf(0)和Long l = 0L将编译成相同的字节码,唯一的区别是风格和可读性。
另外..。
为这样的事情担心时间复杂性有点愚蠢:这两个表达式都是恒定时间。您通常只在对数据集合进行操作时才谈到时间复杂性,而不仅仅是单个数据。
至于内存消耗,它们不像您所说的那样使用64位;通常使用64位的是原始long类型,但是Long (包装器类型)使用的内存比原始类型要多,因为它需要用于与对象相关的东西的内存。
https://stackoverflow.com/questions/56343671
复制相似问题