Lion
Lion

Reputation: 19027

Passing arrays as method parameters in Java

The following code uses simple arrays of String in Java.

package javaarray;

final public class Main
{
    public void someMethod(String[] str)
    {
        System.out.println(str[0]+"\t"+str[1]);
    }
    public static void main(String[] args)
    {
        String[] str1 = new String[] {"day", "night"};
        String[] str2 = {"black", "white"};

        //Both of the above statements are valid.

        Main main=new Main();
        main.someMethod(str1);
        main.someMethod(str2);

        //We can invoke the method someMethod by supplying both of the above arrays alternatively.

        main.someMethod(new String[] { "day", "night" }); //This is also valid as obvious.
        main.someMethod({ "black", "white" }); //This is however wrong. The compiler complains "Illegal start of expression not a statement" Why?
    }
}

In the above code snippet, we can initialize arrays like this.

String[] str1 = new String[] {"day", "night"};
String[] str2 = {"black", "white"};

and we can directly pass it to a method without being assigned like this.

main.someMethod(new String[] { "day", "night" });

If it is so, then the following statement should also be valid.

main.someMethod({ "black", "white" });

but the compiler complains "Illegal start of expression not a statement" Why?

Upvotes: 5

Views: 304

Answers (1)

default locale
default locale

Reputation: 13426

According to Java Language Specification (10.6. Array Initializers)

An array initializer may be specified in a declaration, or as part of an array creation expression (§15.10), creating an array and providing some initial values:

So, there are only two ways you can use an array initializer ({"foo", "bar"}):

  1. Variable declaration: String[] foo = {"foo", "bar"};
  2. Array creation expression: new String[] {"foo", "bar"};

You can't use an array initializer as a method parameter.

15.10. Array Creation Expressions

ArrayCreationExpression:
    new PrimitiveType DimExprs Dimsopt
    new ClassOrInterfaceType DimExprs Dimsopt
    new PrimitiveType Dims ArrayInitializer 
    new ClassOrInterfaceType Dims ArrayInitializer

Upvotes: 8

Related Questions