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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 乔叶旭 于 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;
        }
}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

7 个回复

正序浏览
张海涛 发表于 2012-11-28 01:05
这里是解释:

我弄明白了,谢谢。
回复 使用道具 举报
刘腾 发表于 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 01:45
arr= new int[]{1000} 重新定义了一个名为arr的数组,这会覆盖原来arr 数组的内容 ,是不是可以理解为 重 ...

arr数组名不变,在内存中它们指向的是同一个地址,而地址里面的值被重新改变了(覆盖)

点评

哥们 这么晚还在呢 后天可能要面试了 有点小紧张  发表于 2012-11-28 02:57
回复 使用道具 举报
张海涛 发表于 2012-11-28 01:05
这里是解释:

arr= new int[]{1000} 重新定义了一个名为arr的数组,这会覆盖原来arr 数组的内容 ,是不是可以理解为 重新定义了一个数组,而原来 arr  所指向的传入的数组的指向 改变为了指向这个新创建的数组呢???
回复 使用道具 举报
本帖最后由 彭璞 于 2012-11-28 01:25 编辑

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

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

数组内存图.JPG

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
这里是解释:

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

解答

解答

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马