数组作为方法参数

时间:2012-04-20 05:52:53

标签: java arrays arguments

我们将String数组声明为 -

String[] a={"A"};

但是当一个方法将String数组作为参数时,为什么我们不能像 -

那样调用该方法
mymethod({"A"});

代码 -

class A{
    static void m1(String[] a) { }
    public static void main(String args[]){
        m1(new String []{});//OK
            m1({}); //Error
        }
    }

3 个答案:

答案 0 :(得分:5)

你可以,虽然你的语法有点偏。

mymethod(new String[]{"A"});

答案 1 :(得分:4)

这就是指定语言的方式。来自section 10.6 of the JLS

  

可以在声明(第8.3节,第9.3节,第14.4节)中指定数组初始值设定项,或者作为数组创建表达式(第15.10节)的一部分,以创建数组并提供一些初始值。

所以你已经看到它在声明中工作了,而array creation expression是在开头包含new ArrayElementType的表单:

myMethod(new String[] {"A"});

请记住,当它是声明的一部分时,只涉及一种可能的元素类型。对于方法调用,它更棘手 - 可能有多个重载方法等。基本上,在参与之前,您需要将表达式{"A"}作为字符串数组自行评估重载决议。

对于一些比较,在C#中也是如此,尽管C#3引入了隐式类型数组,其中元素类型是从值推断的,因此您可以编写:

// C# 3
MyMethod(new[] {"A"});

你仍然需要new[]部分。

答案 2 :(得分:1)

你无法传递这样的数组。将其声明为变量,然后将变量传递给方法。