java - 将数组初始值设定项直接传递给方法参数不起作用

标签 java arrays

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

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

最佳答案

foo({1,2});

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

这就是为什么:-

Object[] obj = {1, 2};

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

尝试使用:-

  foo(new Object[]{1,2});

关于java - 将数组初始值设定项直接传递给方法参数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12805535/

相关文章:

java - 如何使用 Mockito 模拟 Restriction.eq()

java - Google App Engine - 有什么方法可以进行异步内存缓存设置吗?

java - 如何在 IntelliJ 中获取源代码以使用部分包含在 JAR 中、部分包含在目录中的包

java - 实例变量和线程

javascript - 带有对象的扁平化数组

java - 如何增加最大 JVM 线程数(Linux 64 位)

c - 根据用户输入构建字符串数组

c - C 中的 Arraylist 不工作

c - 一维数组的 MPI_scatter

arrays - mongodb 中的合并聚合