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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 熊猫86 中级黑马   /  2013-10-27 19:55  /  1345 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 熊猫86 于 2013-10-27 20:20 编辑

请教各位大神:
class Demo
{
        public static void main(String[] args)
        {
                int[] arr=new int[4];
                System.out.println(arr);
        }
}

第一个问题:该程序中最后的打印如果为打印arr[2],结果为0,可以理解;但是如上打印arr,这种写法是错误么?为什么能打印出[I@e6f7d2这样的结果,而没有报错?或者说,这个打印本身有什么实际含义么?
第二个问题:如果是如下,为什么能打印的结果是null?
                int[] arr=new int[4];
                arr=null;
                System.out.println(arr);

4 个回复

倒序浏览
额,后面的视频提到了。。。
回复 使用道具 举报
第一个问题:上部分代码中打印数组arr是没错的,而打印出来的结果是[I@e6f7d2这个值也是没错的,表示打印的是一个数组,而[I@e6f7d2这个值的内容当中,中括号“[”表示这是一个一维数组,“I”表示这是一个int类型的数组,“@”后边的部分表示的是这个数组的hash值。
第二个问题:你将数组arr的值设为null,表示将这个数组的引用指向给断开了,所以下部分的代码中打印arr返回的值是null,通过附件里面的图你就可以明白了。

希望能够帮到你,如果说的有不对的地方,请不吝指教。{:soso_e183:}


123.JPG (25.01 KB, 下载次数: 24)

123.JPG
回复 使用道具 举报
mayor125 发表于 2013-10-27 20:28
第一个问题:上部分代码中打印数组arr是没错的,而打印出来的结果是
第二个问题:你将数组arr的值设为null ...

写得好详细,灰常感谢哈!
刚刚看到后面的视频发现第一个问题提到了
第二个问题你表达得很清楚,我明白啦,再次感谢哈
求版主给加技术分
回复 使用道具 举报
1、这种写法没有错,其代表的含义是返回数组实体的引用,'[I@e6f7d2'中'['表示一维数组,'I'表示数组中元素类型是int类型,'@'应该是一个分隔符,'e6f7d2'表示数组在堆内存中的首地址值
2、因为你把null赋给了arr,覆盖了原来的数组实体引用,所以打印出来的结果为null
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马