数组初始化和“新”关键字

时间:2014-01-16 19:36:53

标签: java arrays

除了语法之外,以下两个语句之间有什么区别吗?

String[] str = { "test" };

String[] str = new String[] {"test"};

3 个答案:

答案 0 :(得分:4)

不,没有区别。除非您想将其传递给方法

methodWhichAcceptsArray({"a", "b"}); //won't compile
methodWhichAcceptsArray(new String[] {"a", "b"}); //ok

答案 1 :(得分:4)

让我们看看:

// String[] str1 = { "test" };
   0: iconst_1      
   1: anewarray     #16                 // class java/lang/String
   4: dup           
   5: iconst_0      
   6: ldc           #18                 // String test
   8: aastore       
   9: astore_1      

// String[] str2 = new String[] {"test"};
  10: iconst_1      
  11: anewarray     #16                 // class java/lang/String
  14: dup           
  15: iconst_0      
  16: ldc           #18                 // String test
  18: aastore       
  19: astore_2      

如您所见,它们编译为相同的字节码。

请注意,在外部实施时,您通常必须使用第二种形式。

答案 2 :(得分:2)

不,没有。

String[] str = { "test" };

将被JVM解释为

String[] str = new String[] {"test"};