首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Long.valueOf(0)和0L在Java中的区别是什么?

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

Stack Overflow用户
提问于 2019-05-28 13:46:05
回答 2查看 5.2K关注 0票数 8

我想知道使用Long.valueOf(0);0L的区别。是一样的吗?

我知道这两者都是长型,所以在Java 8中它们的内存消耗是64位。

那么,考虑到内存消耗和时间复杂性,如何更好地初始化变量呢?

Long a = Long.valueOf(0);

Long b = 0L;

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-28 13:48:43

没什么。

代码语言:javascript
运行
复制
Long b = 0L;

将接受自动拳击治疗。编译器将其替换为:

代码语言:javascript
运行
复制
Long b = Long.valueOf(0L);

如果您对类进行反编译,例如使用javap,您可以看到这一点。

代码语言:javascript
运行
复制
void a() {
  Long a = Long.valueOf(0);
}

void b() {
  Long b = 0L;
}

分解至:

代码语言:javascript
运行
复制
  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

那么,考虑到内存消耗和时间复杂性,如何更好地初始化变量呢?

由于它们在语义上是相同的,所以它们的内存消耗和时间复杂度也是相同的。

相反,专注于什么是真正重要的,也就是可读性:使用你(和其他人)会发现最容易理解的东西。

票数 16
EN

Stack Overflow用户

发布于 2019-05-28 14:18:14

正如其他人所指出的,Long l = Long.valueOf(0)Long l = 0L将编译成相同的字节码,唯一的区别是风格和可读性。

另外..。

为这样的事情担心时间复杂性有点愚蠢:这两个表达式都是恒定时间。您通常只在对数据集合进行操作时才谈到时间复杂性,而不仅仅是单个数据。

至于内存消耗,它们不像您所说的那样使用64位;通常使用64位的是原始long类型,但是Long (包装器类型)使用的内存比原始类型要多,因为它需要用于与对象相关的东西的内存。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56343671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档