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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 会飞De石头 中级黑马   /  2014-6-18 09:57  /  2059 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 会飞De石头 于 2014-6-19 10:31 编辑

        public void meth1() {
                int[][] arr = new int[3][];
                arr[0] = new int[3];
                //arr[1] = new int[1];

                System.out.println(arr);
                System.out.println(arr[0]);
                System.out.println(arr[1]);
                //System.out.println(arr[1][0]);
        }
        
        public void meth2(){
                int[][] arr = new int[3][4];
               
                System.out.println(arr);
                System.out.println(arr[0]);
                System.out.println(arr[1]);
                System.out.println(arr[1][0]);
        }
定义了两个方法,其中meth1没有对二维数组中的一维数组进行定义,结果在打印arr[1]结果不再相同;
meth1中为null;meth2中为地址值,想问一下是怎么回事?或者内存分布有什么不同吗?

8 个回复

倒序浏览
数组是对象,对于第一个方法meth1中,你只是将二维数组arr[0]赋值为一维数组new int[3],而没有将arr[1]赋值,其值就为null,而meth2方法中,在声明arr数组的时候,就已经将一维数组arr[1]赋值,其值为new int[4]。所以一个为null,一个为地址值。
回复 使用道具 举报
二位数组的行是由列组成的,没有列,不能给行的开空间,也就没有地址了
回复 使用道具 举报
              哦啦
回复 使用道具 举报
沙发正解
回复 使用道具 举报
java 中 和c 语言  有点区别  c语言中  不允许出现[]array;
回复 使用道具 举报
学习           
回复 使用道具 举报
杨桦 高级黑马 2014-6-19 00:06:28
8#
      学习
回复 使用道具 举报
喜爱 发表于 2014-6-18 10:34
数组是对象,对于第一个方法meth1中,你只是将二维数组arr[0]赋值为一维数组new int[3],而没有将arr[1]赋 ...

谢谢 表示理解了点
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马