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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ToGame 中级黑马   /  2015-9-16 22:09  /  276 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

先上代码:
    class Demo
        {
                public static void main(String[] args)
                {
                        int a = 10;
                        int b = 20;
                        System.out.println("a:"+a+",b:"+b);//输出:  a:10,b:20
                        change(a,b);
                        System.out.println("a:"+a+",b:"+b);// 输出:  a:10,b:20

                        int[] arr = {1,2,3,4,5};
                        change(arr);
                        System.out.println(arr[1]); //输出: 4
                }

                public static void change(int a,int b)
                {
                        System.out.println("a:"+a+",b:"+b);// 输出:  a:10,b:20
                        a = b;       // a 20 b 20
                        b = a + b;  //a 20 b 40
                        System.out.println("a:"+a+",b:"+b);// 输出:  a:20,b:40
                }

                public static void change(int[] arr)
                {
                        for(int x=0; x<arr.length; x++)
                        {
                                if(arr[x]%2==0)
                                {
                                        arr[x]*=2;
                                }
                        }
                }
        }



语句执行结果是:
                a:10,b:20
                a:10,b:20               
                a:20,b:40
                a:10,b:20
                4
      笔者开始很不能理解,两个方法都木有返回值,为什么数组内的值发生了改变,而传入a,b整型的变量却没有跟着方法内改变。
      看到后面,才知道基本数据类型都是值类型,而数组为引用类型,说到底就是值类型与引用类型的差别
      要理解引用类型与值类型的差别,还是要从内存的角度去理解,不然说什么也听不懂(经验之谈)
讲解:
       值类型,他的数据是存在栈中的,就好比是放在篮子里的鸡蛋,你突然不想吃鸡蛋了,你就把篮子和鸡蛋扔掉了,鸡蛋就没有了,或者你买少了,你叫你对象再去买一个,但鸡蛋在你对象那里,不传给你,你就还是你篮子里鸡蛋数目。
    而引用类型,则是你把鸡蛋存在超市的储物柜里,你有储物柜的钥匙,你不想要这些鸡蛋了,你就把钥匙扔掉了,但鸡蛋还是在储物柜里,只要别人有钥匙就可以去取,这时候,你叫你对象去帮你买鸡蛋,他只要放在储物柜里,你们两个都有钥匙,储物柜的鸡蛋改变了,拥有钥匙的人的鸡蛋数目都会变。

不知道这个比喻恰不恰当,但我就是这么理解的!OK!!嘻嘻

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马