Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java weird array behavior

Tags:

java

arrays

Why is it that this works:

int[] array = {1, 2, 3};

but this doesn't:

int[] array;
array = {1, 2, 3};

If I have an array instance variable and I want to initialize it in my constructor surely I don't have to go

array = new int[3];
array[0] = 1;
array[1] = 2;
array[2] = 3;

I feel like I'm missing something here?

like image 824
kontrarian Avatar asked Nov 27 '22 15:11

kontrarian


2 Answers

The literal syntax i.e. {} can only be used when initializing during declaration.

Elsewhere you can do the following instead:

int[] array;
array = new int[] {1, 2, 3};
like image 52
missingfaktor Avatar answered Dec 16 '22 01:12

missingfaktor


The {...} construct here is called an array initializer in Java. It is a special shorthand that is only available in certain grammatical constructs:

JLS 10.6 Array Initializers

An array initializer may be specified in a declaration, or as part of an array creation expression, creating an array and providing some initial values. [...] An array initializer is written as a comma-separated list of expressions, enclosed by braces "{" and "}".

As specified, you can only use this shorthand either in the declaration or in an array creation expression.

int[] nums = { 1, 2, 3 };       // declaration

nums = new int[] { 4, 5, 6 };   // array creation

This is why the following does not compile:

// DOES NOT COMPILE!!!
nums = { 1, 2, 3 };

// neither declaration nor array creation,
// array initializer syntax not available

Also note that:

  • A trailing comma may appear; it will be ignored
  • You can nest array initializer if the element type you're initializing is itself an array

Here's an example:

    int[][] triangle = {
            { 1, },
            { 2, 3, },
            { 4, 5, 6, },
    };
    for (int[] row : triangle) {
        for (int num : row) {
            System.out.print(num + " ");
        }
        System.out.println();
    }

The above prints:

1 
2 3 
4 5 6 

See also

  • Java Tutorials/Nuts and Bolts/Arrays
  • java.util.Arrays - has many array-related utility methods like equals, toString, etc
like image 33
polygenelubricants Avatar answered Dec 15 '22 23:12

polygenelubricants