3

我有一个带String[]参数的函数。这怎么可能:

String[] string = {"string1", "string2"};
myFunction(string);

有效,而这个:

myFunction({"string1", "string2"});

不是吗?它给了我错误:

非法开始表达
不是声明
“;” 预期的
4

3 回答 3

6

独立{"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");
于 2013-07-10T13:43:31.330 回答
3

你需要

myFunction(new String[]{"string1", "string2"});

语法在Java 语言规范的第 10.2 章数组变量中进行了解释

于 2013-07-10T13:39:13.183 回答
1

这是因为当您{"string1","string2"}作为方法的参数传递时,它不知道对它的期望是什么。

根据文档,仅当您同时声明和实例化数组变量时才允许使用该语法

int[] a={1,4,8,6}; //allowed

这将使 int 数组的长度等于括号中传递的值的数量。. 所以你可以像这样传递匿名数组对象

method(new int[]{2,4,8,9});

但不喜欢method({2,4,8,9});

于 2013-07-10T14:13:58.617 回答