代码之家  ›  专栏  ›  技术社区  ›  non sequitor

Long a=Long.valueOf(1)或Long a=1L之间有什么区别吗?

  •  6
  • non sequitor  · 技术社区  · 16 年前

    只是想知道这个函数和其他相关函数(如Integer)是否是不应该被打扰而应该使用的函数之一 Long a = 1L ;简单明了。

    2 回复  |  直到 16 年前
        1
  •  10
  •   starblue    16 年前

    它们本质上是相同的,当编译器必须将原始Long转换为Long时,它会在内部创建对Long.valueOf()的调用,这被称为“boxing”。

    在普通代码中,您应该使用基本类型long,它比long更有效。仅当需要对象时才需要Long,例如将长值放入集合。

        2
  •  10
  •   Jesper    16 年前

    public class Example {
        public static void main(String[] args) {
            Long a = Long.valueOf(1L);
            System.out.println(a);
        }
    }
    

    javac Example.java javap -c Example .结果如下:

    Compiled from "Example.java"
    public class Example extends java.lang.Object{
    public Example();
      Code:
       0:   aload_0
       1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
       4:   return
    
    public static void main(java.lang.String[]);
      Code:
       0:   lconst_1
       1:   invokestatic    #2; //Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
       4:   astore_1
       5:   getstatic   #3; //Field java/lang/System.out:Ljava/io/PrintStream;
       8:   aload_1
       9:   invokevirtual   #4; //Method java/io/PrintStream.println:(Ljava/lang/Object;)V
       12:  return
    
    }
    

    public class Example {
        public static void main(String[] args) {
            Long a = 1L;
            System.out.println(a);
        }
    }
    

    您将看到此版本的程序编译为与第一个版本完全相同;编译器已生成对的调用 Long.valueOf(...)

    请参阅: Autoboxing