long.Class和Long.TYPE之间的区别

Viv*_*ani 10 java autoboxing junit

他们都返回同样的东西,即长班.实际上我在PrivilegedAccessor中使用它来传递如下

PrivilegedAccessor.invokeMethod(MyClass,
                "MyMethod", new Object[] { arg1, arg2 },
                new Class[] { long.class, Date.class });
Run Code Online (Sandbox Code Playgroud)

或者我可以使用

PrivilegedAccessor.invokeMethod(MyClass,
                    "MyMethod", new Object[] { arg1, arg2 },
                    new Class[] { Long.TYPE, Date.class });
Run Code Online (Sandbox Code Playgroud)

哪个更好用于记住自动装箱/拆箱开销.

**我从测试中传递原始长度,甚至测试的方法只需要原始长度.

rge*_*man 10

它们都代表long原始类型.它们完全相同,即使在编译的字节码中也是如此.示例程序:

public class Main
{
   public static void main(String[] args) {
      Class<Long> c = Long.TYPE;
      Class<Long> c1 = long.class;
   }
}
Run Code Online (Sandbox Code Playgroud)

然后,使用javap -c Main:

c:\dev\src\misc>javap -c Main
Compiled from "Main.java"
public class Main {
  public Main();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":
()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: getstatic     #2                  // Field java/lang/Long.TYPE:Ljava/lang/Class;
       3: astore_1
       4: getstatic     #2                  // Field java/lang/Long.TYPE:Ljava/lang/Class;
       7: astore_2
       8: return
}
Run Code Online (Sandbox Code Playgroud)