前言
一年一度的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核心技術第一版再看一遍方法,居然自己的女朋友名字都叫錯了,您配嗎?
不要有疑惑,我直接說結論:
基本類型參數的傳遞,是調用方值的複製。雙方各自的後續修改,互不影響。
引用類型參數的傳遞,調用方的變量,和接收方的參數變量,指向的是同一個對象(同一塊地址)。雙方任意一方對這個對象的修改,都會影響對方(因爲指向同一個對象嘛)。
String在MSDN裏面也算引用類型,但是!!!編譯器做出了處理,無法表現出引用類型的特性
這裏我引用大佬的文章,分別解釋了基本數據類型和引用類型有哪一些:
https://www.cnblogs.com/maskwolf/p/9972982.html
我們看下面代碼很容易瞭解到:引用類型參數的特性
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對象,眼淚又不爭氣的從眼角流了下來。