【发布时间】:2012-07-17 02:43:15
【问题描述】:
可以通过以下方式声明和初始化字符串数组:
String[] str = {"A", "B"};
但是对于接受字符串数组作为参数的方法,为什么不能在那里使用相同的呢?
例如:如果在下面的代码中,我将对 show() 的调用从 show(str); 替换为 show({"A" "B"});,它会显示编译器错误。为什么?
public class StringArray {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] str = {"A", "B"};
show(str);
}
static void show(String[] s) {
System.out.println(s[0] + s[1]);
}
}
显示的编译器错误是:
StringArray.java:9: illegal start of expression
show({"A", "B"});
^
StringArray.java:9: ';' expected
show({"A", "B"});
^
StringArray.java:9: illegal start of expression
show({"A", "B"});
^
StringArray.java:9: ';' expected
show({"A", "B"});
^
StringArray.java:9: illegal start of type
show({"A", "B"});
^
StringArray.java:11: class, interface, or enum expected
static void show(String[] s) {
^
StringArray.java:13: class, interface, or enum expected
}
^
7 errors
也允许使用show(new String[] {"A", "B"});。 new String[]{"A", "B"} 与 {"A", "B"} 在将它们作为方法参数传递时有何不同?
提前谢谢!
【问题讨论】:
-
看来 {"A", "B"} 本身不能转换为字符串数组类型
-
@Mob 很确定他是在寻求不同,而不是为什么要这样设计。
-
不要刻薄,但是:鉴于有一种相当简单的方式来表达你想要的东西,正如你自己注意到的那样,如果问这样一个问题会导致任何有成效的事情,我会感到惊讶。为什么 Java 需要在 IF 表达式周围加上括号?为什么它说“切换”而不是“选择”?为什么它使用分号来结束语句而不是其他字符?等等等等。在某些时候,语言发明者只需要做出决定。也许在某些情况下,知道做出选择的原因会让您深入了解该语言。但我敢肯定,很多都是随意的。
-
@Jay:我建议您也阅读答案以了解我到底想问什么,因为仅凭这个问题对您来说显然是不够的。