黑马程序员技术交流社区

标题: 这个调用中数组的实体的指向,谁能给我说明白点啊? [打印本页]

作者: 乔叶旭    时间: 2012-11-28 00:32
标题: 这个调用中数组的实体的指向,谁能给我说明白点啊?
本帖最后由 乔叶旭 于 2012-11-28 13:09 编辑

class ArrayTool  
{
        public static void main(String[] args)
        {
                int[] a={1,2,3,4,5,6,7,8,9};
                a = fun1(a);
                System.out.println(a[0]);
        }
        public static int[] fun1(int[] arr)
        {
                arr[0]=10;
                arr=new int[]{1000};
                arr[0]=100;

                return arr;
        }
}


作者: 刘腾    时间: 2012-11-28 00:44
  1. class ArrayTool
  2.        

  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int[] a={1,2,3,4,5,6,7,8,9};
  7.                 a = fun1(a);
  8.                 System.out.println(a[0]);//4、输出a[0]=100
  9.         }
  10.         public static int[] fun1(int[] arr)
  11.         {
  12.                 arr[0]=10;//1、此时数组a[0]=10,数组这样的{10,2,3,4,5,6,7,8,9}
  13.                 arr=new int[]{1000};//2、new了一个新的数组,此数组只有一个元素{1000},a的引用指向该数组,a={1000},a[0]=1000
  14.                 arr[0]=100;//3、将100赋给a[0],a[0]的值由1000变成100

  15.                 return arr;
  16.         }
  17. }
复制代码

作者: 张海涛    时间: 2012-11-28 01:05
这里是解释:

未命名.jpg (87.19 KB, 下载次数: 27)

解答

解答

作者: 彭璞    时间: 2012-11-28 01:24
本帖最后由 彭璞 于 2012-11-28 01:25 编辑

学数组主要是搞清楚内存中的指向问题,提供给你一张内存图吧,看看就懂了

数组内存图.JPG (47.01 KB, 下载次数: 23)

数组内存图.JPG

作者: 乔叶旭    时间: 2012-11-28 01:45
张海涛 发表于 2012-11-28 01:05
这里是解释:

arr= new int[]{1000} 重新定义了一个名为arr的数组,这会覆盖原来arr 数组的内容 ,是不是可以理解为 重新定义了一个数组,而原来 arr  所指向的传入的数组的指向 改变为了指向这个新创建的数组呢???
作者: 张海涛    时间: 2012-11-28 02:23
乔叶旭 发表于 2012-11-28 01:45
arr= new int[]{1000} 重新定义了一个名为arr的数组,这会覆盖原来arr 数组的内容 ,是不是可以理解为 重 ...

arr数组名不变,在内存中它们指向的是同一个地址,而地址里面的值被重新改变了(覆盖)
作者: 乔叶旭    时间: 2012-11-28 10:08
刘腾 发表于 2012-11-28 00:44

arr[0]=10;//1、此时数组a[0]=10,数组这样的{10,2,3,4,5,6,7,8,9}

                arr=new int[]{1000};//2、new了一个新的数组,此数组只有一个元素{1000},a的引用指向该数组,a={1000},a[0]=1000

                arr[0]=100;//3、将100赋给a[0],a[0]的值由1000变成100



能把这三步在内存中 栈  和堆的变化过程画个图吗? 那个新 new 出来的数组 new出来后 , a 的指针指向了 它吗?那原来的数组没有东西指向了吗?
作者: 乔叶旭    时间: 2012-11-28 13:09
张海涛 发表于 2012-11-28 01:05
这里是解释:

我弄明白了,谢谢。




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