欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

520这一天给你new多个个女朋友,你真的分的清new的是谁吗?

程序员文章站 2022-03-06 10:01:32
...

前言

一年一度的520又来了,有女朋友的程序员又来杀狗了。但是不要怕,这几天我每天来给你们new几个女朋友

正文

但是,女盆友也不是白给的,需要你自己答出来哦。

		girlFriend girlFriend1=new girlFriend();
        String girl1="迪丽热巴";
        girlFriend1.setName(girl1);
        System.out.println("第一天我的女朋友是:"+girlFriend1.getName());

没错控制台输出:第一天我的女朋友是:迪丽热巴

第二天到了,咱们今天玩刺激一点的,new一个多人运动出来

		girlFriend girlFriends=new girlFriend();
        String[] girls=new String[]{"赵丽颖","Angelababy"};
        girlFriends.setGirlsName(girls);
        System.out.println("第二天我的女朋友们分别是:"+girlFriends.getGirlsName());

没错控制台输出:第二天我的女朋友们分别是:赵丽颖 Angelababy

第三天到了,咱不如把赵丽颖换成郑爽?说来就来

 		girls[0]="郑爽";
        System.out.println("第三天我的女朋友们分别是:"+girlFriends.getGirlsName());

给个小提醒,我这里并没有写girlFriends.setGirlsName(girls);哦。
所以问题就来了,你这时候的女朋友们是赵丽颖 Angelababy还是郑爽 Angelababy呢?

如果有疑惑,我们看控制台输出:第三天我的女朋友们分别是:郑爽 Angelababy

这里开始答错的统统去再看一遍java核心技术第一版再看一遍方法,居然自己的女朋友名字都叫错了,您配吗?
520这一天给你new多个个女朋友,你真的分的清new的是谁吗?
不要有疑惑,我直接说结论:

基本类型参数的传递,是调用方值的复制。双方各自的后续修改,互不影响。

引用类型参数的传递,调用方的变量,和接收方的参数变量,指向的是同一个对象(同一块地址)。双方任意一方对这个对象的修改,都会影响对方(因为指向同一个对象嘛)。

String在MSDN里面也算引用类型,但是!!!编译器做出了处理,无法表现出引用类型的特性

这里我引用大佬的文章,分别解释了基本数据类型和引用类型有哪一些:
https://www.cnblogs.com/maskwolf/p/9972982.html
520这一天给你new多个个女朋友,你真的分的清new的是谁吗?
520这一天给你new多个个女朋友,你真的分的清new的是谁吗?

我们看下面代码很容易了解到:引用类型参数的特性

        String[] girls=new String[]{"赵丽颖","Angelababy"};
        
        //我们把girls copy过来,其实这里girlsCopy并没有开辟新的内存,还是指向girls的
        String[] girlsCopy=girls;
        
        //所以在这里输出地址值的时候,两者相等
        System.out.println(girls);
        System.out.println(girlsCopy);
        
        //当我们更改girls[0]的值的时候,其实因为girlsCopy指向girls,所以girlsCopy的值也改变了,但是地址值永远不会改变
        girls[0]="郑爽";
        if(girls==girlsCopy){
            System.out.println("girls=girlsCopy");
            for (int i = 0; i < 2; i++) {
                System.out.println("girls["+i+"]="+girls[i]+"   girlsCopy["+i+"]="+girlsCopy[i]);
            }
        }else {
            System.out.println("girls!=girlsCopy");
        }

控制台:

[Ljava.lang.String;@10f87f48
[Ljava.lang.String;@10f87f48
girls=girlsCopy
girls[0]=郑爽   girlsCopy[0]=郑爽
girls[1]=Angelababy   girlsCopy[1]=Angelababy

我相信看到这里,你就很容易想明白其中的套路

结尾

520这一天看到朋友圈的其他程序员都在秀自己的女朋友,而我只能在这里new对象,眼泪又不争气的从眼角流了下来。
520这一天给你new多个个女朋友,你真的分的清new的是谁吗?