我有一个带String[]
参数的函数。这怎么可能:
String[] string = {"string1", "string2"};
myFunction(string);
有效,而这个:
myFunction({"string1", "string2"});
不是吗?它给了我错误:
非法开始表达 不是声明 “;” 预期的
独立{"string1", "string2"}
是语法糖:编译器只能在您声明和初始化数组时推断它应该是什么。但是,就其本身而言,此语法不起作用:
String[] s1 = {"abc"}; // works
String[] s2;
s2 = {"abc"}; // error, need to explicitly use 'new String[]{"abc"}'
顺便说一句,在您的情况下,您可以通过使用varargs来避免显式创建数组:
void myFunction(String... args) {
// args is a String[]
}
...
myFunction("string1", "string2");
这是因为当您{"string1","string2"}
作为方法的参数传递时,它不知道对它的期望是什么。
根据文档,仅当您同时声明和实例化数组变量时才允许使用该语法
int[] a={1,4,8,6}; //allowed
这将使 int 数组的长度等于括号中传递的值的数量。. 所以你可以像这样传递匿名数组对象
method(new int[]{2,4,8,9});
但不喜欢method({2,4,8,9});