差异参数传递给方法和赋值

时间:2014-03-06 20:56:19

标签: java arrays argument-passing assignment-operator

  List<Object[]> d = new ArrayList<Object[]>();

  d.add({"A"});//compile error
  Object [] arr = {"A"};//valid

我一直认为最后两行是同样的操作,并受到类似规则的约束。

谁能解释一下?

4 个答案:

答案 0 :(得分:2)

这不是要将参数传递给方法。初始化数组时,您只能使用{x}简写,例如有效示例。其他任何地方都无效。如果您需要在初始化后稍后实例化数组,则需要使用new int[]

int[] a = {1,2};    // OK

int[] b;
b = {1,2};          // compiler error

答案 1 :(得分:1)

  

我一直认为最后两行是同样的操作,并受到类似规则的约束。

你错了。

  

谁能解释一下?

我无法解释为什么你错了,但我可以解释一下语法。最后一行是有效的,因为它是初始化,并且初始化具有特殊语法。如果您将其拆分为声明和赋值,则在第二行中的赋值中会出现相同的错误。 Java中不存在值的语法。

答案 2 :(得分:0)

您不能将数组初始值设定项用作参数。

答案 3 :(得分:0)

在第一种情况下

d.add({"A"});//compile error

您需要创建一个Object []的新实例作为方法参数,如下所示:

d.add(new Object[]{"A"});

在第二种情况下,您将创建一个Object数组。你也可以做类似的事情:

Object [] arr = new Object[] {"A"};

Java允许您执行以下操作,因为我认为它在原始设计中与C / C ++数组定义保持一定的兼容性。

Object [] arr = {"A"};//valid