Reputation: 19027
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
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"}
):
String[] foo = {"foo", "bar"};
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