posted 16 years ago
In the first part:

A[] a1=new A[1];

A[][] a2=new A[2][1];

A[][][] a3=new A[3][3][3];

System.out.println(a3[2][2][2]);

The arrays are created, and the default values (null) are put into their places.

Therefore the output is *null*.

Second part:

a1[0]=new A();

a2[0]=a2[1]=a1;

a3[0]=a3[1]=a3[2]=a2;

System.out.println(a3[2][2][2]);//1

a1 looks like this:

a1: { the new A() }

an array with only one element, length of the array is one.

When you say

a2[0]=a2[1]=a1;

a2 looks like:

**a2: { a1, a1 }**

Now, a2 no longer has the length of three because it has been reassigned.

and finally

a3[0]=a3[1]=a3[2]=a2;

a3 looks like:

a3: { a2, a2, a2 }

But when you want to have:

System.out.println(a3[2][2][2]);//1

Starting from left to right:

a3[2] points to a2 (all three elements of a3 are a2).

Therefore

a3[2] [2] is the same as

a2[2]

but a2 has only a2[0] and a2[1] (see bold line above), therefore the exception.

Perhaps draw the arrays on a sheet of paper.

Yours,

Bu.

all events occur in real time