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