A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高双武 黑马帝   /  2011-11-9 08:26  /  1699 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在二维数组中,例如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] 的值又是怎么得到的?

评分

参与人数 1技术分 +1 黑马币 +1 收起 理由
admin + 1 + 1

查看全部评分

4 个回复

倒序浏览
要知道一个一维数组是一个Object对象。任何一个多维数组都可以看做是一个一维数组。
二维数组的话,可以看做是一个一维数组,而这个数组里面的每一个元素都是一个一维数组,即是一个Object对象,而这个二维数组本身是一个一维数组的数组,其自身也是一个Object数组。二维数组可以直接转化为一个Object数组,即直接Object[] objs = new int[3][4];既然二维数组是一个Object数组,那你直接打印,就是数组对象
的hashCode了。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
数组有相对应的类,不论一维或者是二维声明一个数组就是等同于创建了一个实例对象,存储在堆中。所以就会有相对应的内存地址也就是hashcode

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报

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

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

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
arr[0]  arr[1]  arr[2] 这些地址存放在堆内存中,arr存放在栈内存中。都是指向的

评分

参与人数 1技术分 +1 黑马币 +1 收起 理由
admin + 1 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马