A variable of array type holds a reference to an object. Declaring a variable of array type does not create an array object or allocate any space for array components. It creates only the variable itself, which can contain a reference to an array. However, the initializer part of a declarator (§8.3) may create an array, a reference to which then becomes the initial value of the variable.
Because an array's length is not part of its type, a single variable of array type may contain references to arrays of different lengths.
Here are examples of declarations of array variables that do not create arrays:
int[] ai; // array of int short[][] as; // array of array of short Object[] ao, // array of Object otherAo; // array of Object short s, // scalar short aas[][]; // array of array of short
Here are some examples of declarations of array variables that create array objects:
Exception ae[] = new Exception[3];
Object aao[][] = new Exception[2][3];
int[] factorial = { 1, 1, 2, 6, 24, 120, 720, 5040 };
char ac[] = { 'n', 'o', 't', ' ', 'a', ' ',
'S
', 't', 'r', 'i', 'n', 'g' };
String[] aas = { "array", "of", "String", };
The []
may appear as part of the type at the beginning of the declaration, or as
part of the declarator for a particular variable, or both, as in this example:
byte[] rowvector, colvector, matrix[];
This declaration is equivalent to:
byte rowvector[], colvector[], matrix[][];
Once an array object is created, its length never changes. To make an array variable refer to an array of different length, a reference to a different array must be assigned to the variable.
If an array variable v has type A[]
, where A is a reference type, then v can hold a reference to an instance of any array type B[]
, provided B can be assigned to A. This may result in a run-time exception on a later assignment; see §10.10 for a discussion.