Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用数组作为函数参数:";不是一份声明”;(爪哇)_Java_String - Fatal编程技术网

Java 使用数组作为函数参数:";不是一份声明”;(爪哇)

Java 使用数组作为函数参数:";不是一份声明”;(爪哇),java,string,Java,String,我有一个函数,它接受一个String[]参数。这怎么可能: String[] string = {"string1", "string2"}; myFunction(string); 有效,鉴于: myFunction({"string1", "string2"}); 不是吗?它给了我一个错误: Illegal start of expression not a statement ";" expected 表达式的非法开始 不是声明 “;”期待着 你需要 myFunction(new St

我有一个函数,它接受一个
String[]
参数。这怎么可能:

String[] string = {"string1", "string2"};
myFunction(string);
有效,鉴于:

myFunction({"string1", "string2"});
不是吗?它给了我一个错误:

Illegal start of expression not a statement ";" expected 表达式的非法开始 不是声明 “;”期待着 你需要

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

中解释。独立的
{“string1”,“string2”}
是语法糖:编译器只能在声明和初始化数组时推断它应该是什么。但是,这种语法本身不起作用:

String[] s1 = {"abc"};  // works

String[] s2;
s2 = {"abc"};  // error, need to explicitly use 'new String[]{"abc"}'

顺便说一句,在您的情况下,您可以使用以下方法避免显式创建数组:


这是因为当您将
{“string1”、“string2”}
作为方法的参数传递时,它不知道该方法的期望值

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

int[] a={1,4,8,6}; //allowed
这将使长度等于括号中传递的值数的int数组。所以可以像这样传递匿名数组对象

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

但不像
方法({2,4,8,9})

等我一下;)搜索JLS@arshajii:简而言之,简单的
{}
表示法仅对初始化有效(即在声明变量的点处为变量赋值时)。在其他任何地方,你都需要使用显式的
新字符串[]{}
。这是初始化符号。我可以使用varargs,但在我的例子中,我的函数有3个参数:int、String[]和Object[],所以我认为这是不可能的…@Sara当然可以,如果你把varargs
字符串
作为最后一个参数的话。e、 g.
void f(intx,Object[]y,String…z){}
。是的,但是我对Object[]有同样的“问题”。我更喜欢保持一致,在这里不使用varargs,因为这意味着我应该只对string[]或object[]使用它。我不认为这会很优雅^^^@Sara这一切都取决于你的节目背景。你到底做什么取决于你自己。
method(new int[]{2,4,8,9});