package arraypkg;
import java.util.Arrays;
public class Main
{
private static void foo(Object o[])
{
System.out.printf("%s", Arrays.toString(o));
}
public static void main(String[] args)
{
Object []o=new Object[]{1,2,3,4,5};
foo(o); //Passing an array of objects to the foo() method.
foo(new Object[]{6,7,8,9}); //This is valid as obvious.
Object[] o1 = {1, 2}; //This is also fine.
foo(o1);
foo({1,2}); //This looks something similar to the preceding one. This is however wrong and doesn't compile - not a statement.
}
}
在前面的代码片段中,除最后一个之外的所有表达式都已编译并运行正常。虽然最后一个看起来类似于其立即语句的语句,但编译器发出编译时错误 - 非法启动表达式 - 而不是语句。为什么呢?
答案 0 :(得分:8)
foo({1,2});
{1,2}这种数组初始化仅适用于您声明数组的位置..在其他地方,您必须使用new
关键字创建它。
这就是原因: -
Object[] obj = {1, 2};
很好..
这是因为,我们在LHS上使用的reference
类型暗示了数组的类型。但是,当我们在其他地方使用它时,编译器无法找到类型(就像你的情况一样).. < / p>
尝试使用: -
foo(new Object[]{1,2});
答案 1 :(得分:3)
foo({1,2});
不会告诉它是什么类型的数组。因此,编译器无法理解语法。所有其他声明都指定了数组的类型。
答案 2 :(得分:1)
foo({1,2});
不是数组。
由于您的foo()
方法采用数组类型参数,因此失败。