日期:2014-05-20  浏览次数:20595 次

arr为二维数组System.out.print(arr)与System.out.print(arr[0])为何不同
arr为二维数组。
    我对数组在内存里的存储不是很懂,只模模糊糊觉得应该是连续存储的。还有我觉得arr是在栈内存中,应该是存储的指向arr[0][0]的地址;arr[0]是第一个一维数组,地址上应该也是指向arr[0][0]的地址,可是实际执行结果为什么不一样呢?
打印(arr)  结果为[[I@内存地址的哈希值
打印(arr[0]) 结果为[I@内存地址的哈希值。  实际执行,两个地址的哈希值不一样。哪位老师能帮忙解答一下,非常感谢!

------解决方案--------------------
数组属于引用类型(还包括字符串和类)
数组由数组变量(即定义时的数组名)和数组元素两部分组成。并且他们是分开存放的,
数组变量存放在内存的栈(heap)中,而数组元素则存放在内存的堆(stack)中。
数组变量就是一个指向堆内存的地址。
计算机访问数组,实际是通过对数组引用变量的引用,利用数组引用变量所指向的堆内存空间,来访问数组的元素。
而二维数组可以理解为一维数组的数组,即一维数组arr的每个元素都是一个一维数组。
比如arr[3][3]
arr[0]、arr[1]、arr[2]是三个一维数组的引用,它们被存储在一个一维数组,这个数组的引用是arr