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

我想知道使用Long.valueOf(0);or之间的区别0L。它们相同吗?

我知道两者都是Long 类型,因此它们在 Java 8 中的内存消耗为 64 位长。

那么在考虑内存消耗和时间复杂度的情况下,如何初始化一个变量更好呢?

Long a = Long.valueOf(0);

要么

Long b = 0L;


BIG阳
浏览 539回答 2
2回答

慕侠2389804

没有什么。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那么在考虑内存消耗和时间复杂度的情况下,如何更好地初始化一个变量呢?因为它们在语义上是相同的,所以内存消耗和时间复杂度也相同。相反,专注于真正重要的东西,即可读性:使用你(和其他人)一目了然会发现最容易理解的。

catspeake

正如其他人指出的那样,Long l = Long.valueOf(0)将Long l = 0L编译为相同的字节码,唯一的区别是风格和可读性。此外..为这样的事情担心时间复杂度有点傻:两个表达式都是常数时间。在处理数据集合而不仅仅是单个数据时,您通常只谈论时间复杂度。至于内存消耗,他们没有像你说的那样使用64位;long它是通常使用 64 位的原始类型,但Long(包装类型)使用比原始类型更多的内存,因为它需要该内存用于与对象相关的内容。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java