Java的值傳遞和引用傳遞

看過一些Java教材的話,對這句話應(yīng)該不陌生:

“在Java里面參數(shù)傳遞都是按值傳遞”這句話的意思是:
按值傳遞是傳遞的值的拷貝,按引用傳遞其實傳遞的是引用的地址值,所以統(tǒng)稱按值傳遞。

簡單的說,基本類型是按值傳遞的,方法的實參是一個原值的復(fù)本。類對象是按對象的引用地址(內(nèi)存地址)傳遞地址的值,那么在方法內(nèi)對這個對象進(jìn)行修改是會直接反應(yīng)在原對象上的(或者說這兩個引用指向同一內(nèi)存地址)。不過要注意String這個類型,如下代碼:

引用傳遞示例

String 非基本數(shù)據(jù)類型,但是String值不可修改

public static void main(String[] args) {
    String x = new String("goeasyway");
    change(x);
    System.out.println(x);
}

public static void change(String x) {
    x = "even";
}

結(jié)果


Paste_Image.png

String的對象是不可修改的,如果真正要達(dá)到改變字符串的效果,我們需要使用StringBuilder來替代String。

StringBuffer 代替String,引用示例

public static void main(String[] args) {
    StringBuffer sb = new StringBuffer();
    change(sb);
    System.out.println(sb.toString());
}

public static void change(StringBuffer s) {
    s.append("hello");
}

結(jié)果


Paste_Image.png

引用傳遞一個對象

static class Student {
    public int age;
    public String name;

    public Student(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student [age=" + age + ", name=" + name + "]";
    }

}

public static void main(String[] args) {
    Student student = new Student(20, "jack");
    change(student);
    System.out.println(student.toString());
}

public static void change(Student s) {
    s.age = 18;
    s.name = "alice";
}

結(jié)果:

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 大家好我是白澤。 這篇打算講講java開發(fā)中新人要知道的一些事情吧 對象引用和值引用,這個是在基礎(chǔ)不過的知識了,但...
    白澤1935閱讀 413評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,593評論 19 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,441評論 6 13
  • Java的值傳遞和引用傳遞問題 String的對象是不可修改的,如果真正要達(dá)到改變字符串的效果,我們需要使用Str...
    gadfly_only閱讀 616評論 0 50
  • 昨晚,閨蜜給我打電話了,這是我們今年大學(xué)畢業(yè)后她給我打的第一個電話,平日里我們要是嘮嘮嗑,都會微信或者QQ。她...
    李艷玲閱讀 304評論 0 0

友情鏈接更多精彩內(nèi)容