Java 数组初始化和“new”关键字
撇开语法不谈,下面两个语句之间有什么区别吗Java 数组初始化和“new”关键字,java,arrays,Java,Arrays,撇开语法不谈,下面两个语句之间有什么区别吗 String[] str = { "test" }; 及 不,没有 String[] str = { "test" }; 将由JVM解释为 String[] str = new String[] {"test"}; 不,没有 String[] str = { "test" }; 将由JVM解释为 String[] str = new String[] {"test"}; 不,没有区别。除非要将其传递给方法 methodWhichAccepts
String[] str = { "test" };
及
不,没有
String[] str = { "test" };
将由JVM解释为
String[] str = new String[] {"test"};
不,没有
String[] str = { "test" };
将由JVM解释为
String[] str = new String[] {"test"};
不,没有区别。除非要将其传递给方法
methodWhichAcceptsArray({"a", "b"}); //won't compile
methodWhichAcceptsArray(new String[] {"a", "b"}); //ok
不,没有区别。除非要将其传递给方法
methodWhichAcceptsArray({"a", "b"}); //won't compile
methodWhichAcceptsArray(new String[] {"a", "b"}); //ok
让我们看看:
// 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
如您所见,它们编译为相同的字节码
请注意,在初始化之外,通常必须使用第二种形式。让我们看看:
// 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
如您所见,它们编译为相同的字节码
请注意,在初始化之外,通常必须使用第二种形式。不能将第一种形式分解为多个语句。仅此而已。不,这只是一个快捷语法。您可以通过查看这两段代码生成的字节码进行检查。您不能将第一段代码分解为多个语句。仅此而已。不,这只是一个快捷语法。您可以通过查看这两段代码生成的字节码进行检查。