大家都知道值傳遞和引用傳遞,下面我來(lái)通過(guò)以一個(gè)問(wèn)題和示例來(lái)解決引用類型傳遞的原理
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比東興網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式東興網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋東興地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。? 1)先創(chuàng)建了引用類型Person里面有String name 和int age?
? 2)new 一個(gè)對(duì)象,把這個(gè)對(duì)象的值賦給a,再把a(bǔ)賦給Person類型的b
package classtest1224;
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
主函數(shù)Person a = new Person();
a.setAge(18);
a.setName("zzt");
Person b = a;
System.out.println("--------------");
System.out.println(a);
System.out.println(b);
System.out.println("--------------");
System.out.println("接下來(lái)改變a的Name看看b的值能不能改變");
b.setName("慢慢學(xué)");
System.out.println(a);
System.out.println(b);
思考:將a的值賦值給了b,通過(guò)改變b的值能改變a的值嗎?
你的結(jié)果是這樣嗎?
Person{name='zzt', age=18}
Person{name='慢慢學(xué)', age=18}測(cè)試結(jié)果如下
Person{name='慢慢學(xué)', age=18}
Person{name='慢慢學(xué)', age=18}
是不是挺奇怪的,這就是引用傳遞具體
可以見(jiàn)下面這張圖?
提出問(wèn)題1.String的字符串池問(wèn)題所以所有引用類型的值是不是都是這也傳遞的呢?經(jīng)過(guò)我的學(xué)習(xí),除了String類剩下的都是可以的下來(lái)就看看String類到底是怎么樣的
String s1 = "abc";
String s2 = "abc";
System.out.println(s1==s2);
比較結(jié)果會(huì)是怎么樣的?true?false?
是內(nèi)容一樣但是地址不一樣,所以結(jié)果是false嗎?
測(cè)試結(jié)果:true?
我先看了String源碼發(fā)現(xiàn)底層是final的字符數(shù)組,意思就是她的值是不可改變的,那為什么字符串可以進(jìn)行a+="abc";操作呢?
原因是:每次修改String類型的值都會(huì)重新創(chuàng)建一個(gè)出來(lái),所以對(duì)字符串的操作是非常浪費(fèi)資源的。但因?yàn)閖ava的垃圾回收機(jī)制,長(zhǎng)時(shí)間不用的又會(huì)被回收掉!
不多廢話了!直接上代碼?。?!
String c = "abc";
String d = c;
System.out.println("改變c看看d的值是否改變");
c+="d";
System.out.println(d);
測(cè)試結(jié)果如下?
以上是我這篇博客的內(nèi)容如有不正確的地方希望大家指出?。?!通過(guò)改變c的值發(fā)現(xiàn)d的值并沒(méi)有改變
原理是:String類型有特定的字符串池,每次改變字符串的值就會(huì)向常量池中添加新的字符串,如下如圖所示:?
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧