Ren*_*lee 10 java arrays parameters constructor initializer
我有一个方法有一个数组参数,如:
public static void foo(int[] param) {
// Some code
}
Run Code Online (Sandbox Code Playgroud)
而且我也可以通过写作来调用方法
foo(new int[3]);
Run Code Online (Sandbox Code Playgroud)
通常,我们通过new运算符或双括号初始化器(如{1,2,3})声明和初始化数组.例如,int[] foo = new int[3]; 或 int[] foo = {1, 2, 3};.
但是使用双括号初始化器作为方法的参数是不可能的.{}仅适用于创建数组对象.
这是我的问题:新运营商和{}?之间有什么区别吗?如果有,那是什么?
Pet*_*esh 17
该{}的作为一部分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});你告诉编译器该项目的{}意思是什么.
编译器不会(也不会尝试)自动解释{}表达式,直到匹配为止 - 这会导致潜在的歧义.
还有这个问题,似乎涵盖了完全相同的理由.
正如@benzonico所提到的,它是语言规范的一部分,因为它是一种受支持的语法,它不包括在方法的调用中使用它.