5
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.
    }
}

在前面的代码片段中,除最后一个之外的所有表达式都已编译并运行良好。尽管最后一条语句看起来与它的直接语句相似,但编译器会发出编译时错误 - 表达式的非法开始 - 而不是语句。为什么?

4

3 回答 3

9
foo({1,2});

{1, 2} 这种数组初始化只在你声明数组的地方起作用。在其他地方,你必须使用new关键字来创建它。

因此: -

Object[] obj = {1, 2};

很好..这是因为数组的类型隐含在reference我们在 LHS 上使用的类型中。但是,当我们在其他地方使用它时,编译器无法找出类型(就像你的情况一样)..

尝试使用: -

  foo(new Object[]{1,2});
于 2012-10-09T17:48:49.347 回答
3

foo({1,2}); 不知道它是什么类型的数组。因此,编译器无法理解语法。所有其他声明指定数组的类型。

于 2012-10-09T17:49:58.887 回答
1

foo({1,2});不是数组。

由于您的foo() 方法采用数组类型参数,因此失败。

于 2012-10-09T17:53:05.783 回答