日期:2014-05-20  浏览次数:20692 次

java二维数组问题
下面是我刚开始学java二维数组的疑问。
代码如下
Java code

public class Array2Demo
{
    public static void main(String[] args)
    {
        //二维数组的定义
        int[][] arr=new int[2][3];
        //arr[1][2]=12;
        System.out.println(arr);
        System.out.println(arr[0]);
        //System.out.println(arr[0][0]);
    }
}

程序输出的结果是:
[[I@c17164
[I@1fb8ee3

我的问题是为什么两个输出的地址是不同的,求原理?
请各位帮我看看,给出详细的解答,感谢万千!

------解决方案--------------------
首先跟你说下,在面向对象的程序设计当中,如果能不用数组就不要用数组,能不用二维数组就不用,用List比较好,java编程思想的作者也是这样推荐。所以在学习的时候没有必要费心思搞数组的太深的问题。

这里的问题是,为什么你觉得arr和arr[0]的地址是一样的呢,这个不符合逻辑。arr是引用对象,编译的时候它本身也占用内存,这个对象实际上指向了 值对象,不管arr是一维数组对象还是二维。

当你主动调用arr[0]的时候,程序会新返回一个引用对象,跟之前的arr显然不一样啊,你可以理解arr的引用能找到arr[0] arr[1]这两个引用对象,而arr[0]这个引用找到的是arr[0][0] arr[0][1] arr[0][2]这三个值
------解决方案--------------------
很明显不可能一样的
引用对象指的对象就不一样
arr[0] arr[1]这两个引用对象,
而arr[0]这个引用找到的是arr[0][0] arr[0][1] arr[0][2]这三个值
------解决方案--------------------
楼上说的已经很好了,我想说一点,即使对数组不是太了解,但看arr【】和arr【0】这两个引用对象从外形上都不一样,所以打印出来的东西部一样就很正常了啊
------解决方案--------------------
System.out.println(arr);
System.out.println(arr[0]);
首先这两句打印的不是地址
其次java里面的数组和c的数组是不一致的,c的数组你可以直接得到地址,java是不行的