As for your questions, I'm not an expert on 'reference variables' so don't know if your statements are correct, but I'll answer you in a different way. Your declaration/allocation statement reserves space in memory for 5 x 4 x 3 x 2 (120) integer values. The value of each of those memory locations can be specified by an index of your variable myArray.
Paul, I believe the correct number in your example is 5 + 5*4 + 5*4*3 = 85 array references. So it might be a good idea to make the largest dimension the last. If you reversed the order, it would be 2 + 2*3 + 2*3*4 = 31.
However, in practice I find that many-dimensional arrays are rare. Also, a reference is just a 32-bit or 64-bit number, so you'd probably only need to worry about it if you're using arrays with hundreds of millions of elements.
The advantage of using an array of arrays over a multi-dimensional array is that you don't have to have all the arrays the same size. You will find this sort of thing called a rectangular array:That creates a 3-element array, with references to int objects. Each int object contains 3 ints; since you haven't given them values they will all be 0s. Had you used reference types are the type of element, there would be 9 nulls. Beware of nulls.
You can also write this sort of thingThis is called a jagged array. Note numbers is an empty array, but you can change that: