我有一个具有数组参数的方法,例如:
public static void foo(int[] param) {
// Some code
}
而且我也可以通过这样写来调用方法
foo(new int[3]);
通常,我们通过 new 运算符或双括号初始化器(如 {1, 2, 3})来声明和初始化数组。例如,int[] foo = new int[3];
或 int[] foo = {1, 2, 3};
。
但是不可能使用双括号初始化器作为方法的参数。 {}
仅可用于创建数组对象。
我的问题是:new operator 和 {}
之间有什么区别吗?
如果有,那是什么?
作为 int foo[] = {1, 2, 3};
一部分的 {}
被称为大括号初始化,是int foo[] = new int[]{1, 2, 3};
因为可以从左侧推断出 new int[]
。
在第二种情况下 foo({1, 2, 3});
无法推断出您的意图,因为没有提示 {1, 2 , 3}
意味着,所以编译器会报错。
当您将其重写为 foo(new int[]{1, 2, 3});
时,您是在告诉编译器 {}
中的项目是什么意味着代表。
编译器不会(也不会尝试)自动解释 {}
表达式直到它匹配 - 这会导致潜在的歧义。
还有this question ,这似乎涵盖了完全相同的领域。
如@benzonico 所述,它是 language specification 的一部分至于这是一种受支持的语法,其中不包括它在方法调用中的使用。