黑马程序员技术交流社区

标题: 请教一个关于二维数组的问题 [打印本页]

作者: 高双武    时间: 2011-11-9 08:26
标题: 请教一个关于二维数组的问题
在二维数组中,例如int [][] arr=new int[3][4],该数组中包含了三个以为数组,运行下面的程序
package execisetest;
public class MutiArray {
        public static void main(String [] args){
                int [][]arr=new int[3][4];
                System.out.println(arr[0]);
                System.out.println(arr[1]);
                System.out.println(arr[2]);
                System.out.println(arr);
        }       
}
运行结果为
[I@18c56d
[I@497934
[I@1b48197
[[I@1a80a69

其中arr这个是存放在栈中的,但是arr[0]  arr[1]  arr[2] 的输出也是地址,那么这些地址存放在哪?是定义二维数组时就在栈中保存了arr  arr[0]  arr[1]  arr[2] 这四个变量内容还是只保存了arr,如果只保存了arr那么arr[0]  arr[1]  arr[2] 的值又是怎么得到的?
作者: fso918    时间: 2011-11-9 08:47
要知道一个一维数组是一个Object对象。任何一个多维数组都可以看做是一个一维数组。
二维数组的话,可以看做是一个一维数组,而这个数组里面的每一个元素都是一个一维数组,即是一个Object对象,而这个二维数组本身是一个一维数组的数组,其自身也是一个Object数组。二维数组可以直接转化为一个Object数组,即直接Object[] objs = new int[3][4];既然二维数组是一个Object数组,那你直接打印,就是数组对象
的hashCode了。
作者: 胡文杰    时间: 2011-11-9 09:57
数组有相对应的类,不论一维或者是二维声明一个数组就是等同于创建了一个实例对象,存储在堆中。所以就会有相对应的内存地址也就是hashcode
作者: 路新    时间: 2011-11-9 11:11

堆内存用来存放有new创建的对象和数组。在堆中产生了一个数组或对象后,还可以
在栈中定义一个特殊的变量,让栈中这个变量的取值等于或对象在堆内存中的首地址
,栈中的这个变量就成了数组或对象的引用变量

Java中的二位数组就是一维数组中的每个元素都还是个数组,二维数组看作是数组的
数组,数组空间不是连续分配的,首先为最高维分配引用空间,然后再顺次为低维分配
空间
arr[0]  arr[1]  arr[2] 这些地址存放在堆内存中  是定义二维数组引用变量arr存放在栈中
作者: 海林    时间: 2011-11-9 11:45
arr[0]  arr[1]  arr[2] 这些地址存放在堆内存中,arr存放在栈内存中。都是指向的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2