![](/img/trans.png)
[英]Is there any difference between Long a = Long.valueOf(1) or Long a = 1L?
[英]Which is the difference between Long.valueOf(0) and 0L in Java?
我想知道使用Long.valueOf(0);
之间的区别Long.valueOf(0);
或0L
。 它们是一样的吗?
据我所知,两者都是Long类型,所以它们在Java 8中的内存消耗为64位。
那么考虑内存消耗和时间复杂度,如何更好地初始化变量呢?
Long a = Long.valueOf(0);
要么
Long b = 0L;
没有。
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
那么考虑内存消耗和时间复杂度,如何更好地初始化变量呢?
因为它们在语义上是相同的,所以内存消耗和时间复杂度也是相同的。
相反,要关注实际上重要的东西,即可读性 :使用你(和其他人)最容易理解的那一个。
正如其他人所指出的, Long l = Long.valueOf(0)
和Long l = 0L
将编译为相同的字节码,唯一的区别是样式和可读性。
另外..
担心这样的事情的时间复杂性有点傻:两个表达都是恒定的时间。 在处理数据集合时, 通常只讨论时间复杂度,而不仅仅是单个数据。
至于内存消耗,它们不像你说的那样使用64位; 它是原始的long
类型,通常使用64位但Long
(包装类型)使用的内存比原始类型多,因为它需要内存用于与对象相关的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.