繁体   English   中英

Java中Long.valueOf(0)和0L的区别是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM