引用傳遞示例,以及String類型如何傳遞的原理-創(chuàng)新互聯(lián)

問題引入

大家都知道值傳遞和引用傳遞,下面我來通過以一個(gè)問題和示例來解決引用類型傳遞的原理

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比東興網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式東興網(wǎng)站制作公司更省心,省錢,快速模板網(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("接下來改變a的Name看看b的值能不能改變");
        b.setName("慢慢學(xué)");
        System.out.println(a);
        System.out.println(b);

思考:將a的值賦值給了b,通過改變b的值能改變a的值嗎?

你的結(jié)果是這樣嗎?

Person{name='zzt', age=18}
Person{name='慢慢學(xué)', age=18}

測試結(jié)果如下

Person{name='慢慢學(xué)', age=18}
Person{name='慢慢學(xué)', age=18}

是不是挺奇怪的,這就是引用傳遞具體

可以見下面這張圖?

提出問題

所以所有引用類型的值是不是都是這也傳遞的呢?經(jīng)過我的學(xué)習(xí),除了String類剩下的都是可以的下來就看看String類到底是怎么樣的

1.String的字符串池問題
String s1 = "abc";
        String s2 = "abc";
        System.out.println(s1==s2);

比較結(jié)果會(huì)是怎么樣的?true?false?

是內(nèi)容一樣但是地址不一樣,所以結(jié)果是false嗎?

測試結(jié)果:true?

我先看了String源碼發(fā)現(xiàn)底層是final的字符數(shù)組,意思就是她的值是不可改變的,那為什么字符串可以進(jìn)行a+="abc";操作呢?

原因是:每次修改String類型的值都會(huì)重新創(chuàng)建一個(gè)出來,所以對(duì)字符串的操作是非常浪費(fèi)資源的。但因?yàn)閖ava的垃圾回收機(jī)制,長時(shí)間不用的又會(huì)被回收掉!

不多廢話了!直接上代碼!??!

String c = "abc";
        String d = c;
        System.out.println("改變c看看d的值是否改變");
        c+="d";
        System.out.println(d);

測試結(jié)果如下?

通過改變c的值發(fā)現(xiàn)d的值并沒有改變

原理是:String類型有特定的字符串池,每次改變字符串的值就會(huì)向常量池中添加新的字符串,如下如圖所示:?

以上是我這篇博客的內(nèi)容如有不正確的地方希望大家指出?。。?p>你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁題目:引用傳遞示例,以及String類型如何傳遞的原理-創(chuàng)新互聯(lián)
本文地址:http://muchs.cn/article2/psooc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、網(wǎng)站改版域名注冊、全網(wǎng)營銷推廣、自適應(yīng)網(wǎng)站搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化