使用数组作为函数参数:“not a statement”(Java)

时间:2013-07-10 13:38:20

标签: java string

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

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

有效,但是:

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

不?它给了我错误:

Illegal start of expression
not a statement
";" expected

3 个答案:

答案 0 :(得分: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");

答案 1 :(得分:3)

你需要

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

语法在Java Language Specification, Chapter 10.2 Array Variables

中说明

答案 2 :(得分:1)

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

根据文档,只有在同时声明和实例化数组变量时才允许语法

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

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

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

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