Java: Why can't return array using {..} without new operator?

arrays, java

Solution

In the declaration:

char[ ] charAr={'a', 'b', 'c'};

the array `{'a', 'b', 'c'}` is called an array initializer. It is described in Section 10.6 of the Java Language Specification. It can only be written like that (without the `new char[]` in front of it) as part of a variable declaration.

In any other place (including a `return` statement), you need to use an array creation expression. These are described in Section 15.10 of the JLS. You can use either an array initializer or an array creation expression to initialize a variable when it is declared. That's why the `new char[]` appears to be optional when you declare the variable.

Regarding your 4th question: they technically are not "constructors" (which has a specific meaning in Java terminology) but yes, they both construct arrays (or, perhaps more accurately, they both create arrays).

Problem

I have searched a lot on the website, but didn't find any related question. So I believe it is not a duplicate. I know we can initialize an array with 3 ways: - `char[ ] charAr=new char[10];` - `char[ ] charAr={'a', 'b', 'c'};` - `char[ ] charAr=new char[]{'a','b','c'};` 1st question is: what is the name of `{'a','b','c'}` kind of stuff? Is it called array literals? 2nd question is: what is the difference between `new char[]{'a','b','c'}` with `{'a','b','c'}`? 3rd question is: why I can't return a newly created array with `{'a','b','c'}`? I have to return `new char[]{'a','b','c'}`. 4th question: both `new char[10]` and `new char[]{'a','b','c'}` are constructors of array, right?

Original source

Related problems