Passing arrays as method parameters in Java
java
Solution
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"}`):
- Variable declaration: `String[] foo = {"foo", "bar"};`
- 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
Problem
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?