黑马程序员技术交流社区

标题: 数组打印 [打印本页]

作者: 熊猫86    时间: 2013-10-27 19:55
标题: 数组打印
本帖最后由 熊猫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);


作者: 熊猫86    时间: 2013-10-27 20:21
额,后面的视频提到了。。。
作者: mayor125    时间: 2013-10-27 20:28
第一个问题:上部分代码中打印数组arr是没错的,而打印出来的结果是[I@e6f7d2这个值也是没错的,表示打印的是一个数组,而[I@e6f7d2这个值的内容当中,中括号“[”表示这是一个一维数组,“I”表示这是一个int类型的数组,“@”后边的部分表示的是这个数组的hash值。
第二个问题:你将数组arr的值设为null,表示将这个数组的引用指向给断开了,所以下部分的代码中打印arr返回的值是null,通过附件里面的图你就可以明白了。

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


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

123.JPG

作者: 熊猫86    时间: 2013-10-27 20:46
mayor125 发表于 2013-10-27 20:28
第一个问题:上部分代码中打印数组arr是没错的,而打印出来的结果是
第二个问题:你将数组arr的值设为null ...

写得好详细,灰常感谢哈!
刚刚看到后面的视频发现第一个问题提到了
第二个问题你表达得很清楚,我明白啦,再次感谢哈
求版主给加技术分
作者: 李文帅    时间: 2013-10-27 20:49
1、这种写法没有错,其代表的含义是返回数组实体的引用,'[I@e6f7d2'中'['表示一维数组,'I'表示数组中元素类型是int类型,'@'应该是一个分隔符,'e6f7d2'表示数组在堆内存中的首地址值
2、因为你把null赋给了arr,覆盖了原来的数组实体引用,所以打印出来的结果为null




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