首页 > 解决方案 > new Class[]{} 和 new Class[0] 有区别吗?

问题描述

new Class[]{}和有区别new Class[0]吗?如果是,有什么不同?

标签: javaarrays

解决方案


没有不同。

反编译这个:

final class Foo {
  Class[] a = new Class[]{};
  Class[] b = new Class[0];
}

产量

final class Foo {
  java.lang.Class[] a;

  java.lang.Class[] b;

  Foo();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: aload_0
       5: iconst_0
       6: anewarray     #2                  // class java/lang/Class
       9: putfield      #3                  // Field a:[Ljava/lang/Class;
      12: aload_0
      13: iconst_0
      14: anewarray     #2                  // class java/lang/Class
      17: putfield      #4                  // Field b:[Ljava/lang/Class;
      20: return
}

也就是说,这两种形式产生相同的字节码。


推荐阅读