29

In Java, it is completely legal to initialize a String array in the following way:

String[] s = {"FOO", "BAR"};

However, when trying to instantiate a class that takes a String array as a parameter, the following piece of code is NOT allowed:

Test t = new Test({"test"});

But this works again:

Test t = new Test(new String[] {"test"});

Can someone explain why this is?

Hermann Hans
  • 1,778
  • 1
  • 13
  • 23

3 Answers3

45
String[] s = {"FOO", "BAR"};  

this is allowed at declaration time only

You can't

String[] s;
s={"FOO", "BAR"};  
jmj
  • 232,312
  • 42
  • 391
  • 431
5

Because Type[] x = { ... } is an initialization syntax for arrays. The { ... } is interpreted in a specific way only in that specific context.

Karl Knechtel
  • 56,349
  • 8
  • 83
  • 124
3

For you want a simple way to pass a String array, I suggest you use varargs

class Test {
   public Test(String...args);
}

// same as new Test(new String[] { "test", "one" })
Test t = new Test("test", "one"); 
Peter Lawrey
  • 513,304
  • 74
  • 731
  • 1,106