下面是我刚开始学java二维数组的疑问。
代码如下
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我的问题是为什么两个输出的地址是不同的,求原理?
请各位帮我看看,给出详细的解答,感谢万千!

解决方案 »

  1.   

    首先跟你说下,在面向对象的程序设计当中,如果能不用数组就不要用数组,能不用二维数组就不用,用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]这三个值
      

  2.   

    很明显不可能一样的
    引用对象指的对象就不一样
    arr[0] arr[1]这两个引用对象,
    而arr[0]这个引用找到的是arr[0][0] arr[0][1] arr[0][2]这三个值
      

  3.   

    楼上说的已经很好了,我想说一点,即使对数组不是太了解,但看arr【】和arr【0】这两个引用对象从外形上都不一样,所以打印出来的东西部一样就很正常了啊
      

  4.   

    System.out.println(arr);
    System.out.println(arr[0]);
    首先这两句打印的不是地址
    其次java里面的数组和c的数组是不一致的,c的数组你可以直接得到地址,java是不行的