欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文讓你徹底明白Java中的值傳遞和引用傳遞

 更新時(shí)間:2023年10月11日 09:03:34   作者:我是小章哥  
這篇文章主要給大家介紹了關(guān)于Java中值傳遞和引用傳遞的相關(guān)資料,值傳遞是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)復(fù)制一份傳遞到函數(shù)中,引用傳遞是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)的引用直接傳遞到函數(shù)中,需要的朋友可以參考下

基本概念

值傳遞:

傳遞對象的一個(gè)副本,即使副本被改變,也不會(huì)影響源對象,因?yàn)橹祩鬟f的時(shí)候,實(shí)際上是將實(shí)參的值復(fù)制一份給形參。

引用傳遞:

傳遞的并不是實(shí)際的對象,而是對象的引用,外部對引用對象的改變也會(huì)反映到源對象上,因?yàn)橐脗鬟f的時(shí)候,實(shí)際上是將實(shí)參的地址值復(fù)制一份給形參。
說明:對象傳遞(數(shù)組、類、接口)是引用傳遞,原始類型數(shù)據(jù)(整形、浮點(diǎn)型、字符型、布爾型)傳遞是值傳遞。

例子:

1、值傳遞:

public class Demo {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 20;
        work(num1, num2);
        System.out.println("num1 = " + num1);
        System.out.println("num2 = " + num2);
    }
    public static void work(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
?
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }
}

運(yùn)行結(jié)果:

a = 20
b = 10
num1 = 10
num2 = 20

雖然在work()方法中a,b的值做了交換,但是主方法中num1,num2的值并未改變。

2、引用類型傳遞

public class ArrayListDemo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        change(arr);
        System.out.println(arr[0]);
    }
    public static void change(int[] array) {
        System.out.println(array[0]);
        array[0] = 0;
    }
}

運(yùn)行結(jié)果:

1
0

在change()方法中將數(shù)組的第一個(gè)元素改為0,主方法中數(shù)組的第一個(gè)元素也跟著變?yōu)?。

3、StringBuffer類型

public class Demo {
?
    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer("北京異鄉(xiāng)人");
        System.out.println(stringBuffer);
?
        changeStringBuffer(stringBuffer);
        System.out.println(stringBuffer);
    }
?
    public static void changeStringBuffer(StringBuffer stringBuffer) {
        stringBuffer = new StringBuffer("河北異鄉(xiāng)人");
        stringBuffer.append(",哈哈哈");
    }
}

運(yùn)行結(jié)果:

北京異鄉(xiāng)人
北京異鄉(xiāng)人

也許你會(huì)認(rèn)為第2次應(yīng)該輸出“河北異鄉(xiāng)人,哈哈哈”,怎么輸出的還是原來的值呢,那是因?yàn)樵赾hangeStringBuffer中,又new了一個(gè)StringBuffer對象,此時(shí)stringBuffer變量指向的內(nèi)存地址已經(jīng)改變,所以主方法中的stringBuffer變量未受到影響。
如果修改changeStringBuffer()方法的代碼為:

public static void changeStringBuffer(StringBuffer stringBuffer) {
    stringBuffer.append(",歡迎大家關(guān)注");
}

則運(yùn)行結(jié)果會(huì)變?yōu)椋?/p>

北京異鄉(xiāng)人
北京異鄉(xiāng)人,歡迎大家關(guān)注

4、String類型

public class Demo {
    public static void main(String[] args) {
        String str = new String("北京異鄉(xiāng)人");
        System.out.println(str);
        changeString(str);
        System.out.println(str);
    }
?
    public static void changeString(String string) {
        string = new String("河北異鄉(xiāng)人");
    }
}

運(yùn)行結(jié)果:

北京異鄉(xiāng)人
北京異鄉(xiāng)人

在changeString()方法中不管用string = “河北異鄉(xiāng)人”;還是string = new String(“河北異鄉(xiāng)人”);,
主方法中的str變量都不會(huì)受影響,也驗(yàn)證了String創(chuàng)建之后是不可變更的。

5、自定義類型

public class Person {
    private String name;
    public String getName() {
        return name;
    }
?
    public void setName(String name) {
        this.name = name;
    }
?
    public Person(String name) {
        this.name = name;
    }
}
?
public class ArrayListDemo {
?
    public static void main(String[] args) {
        Person person = new Person("李四");
        System.out.println(person.getName());
?
        changePerson(person);
        System.out.println(person.getName());
    }
?
    public static void changePerson(Person p) {
        Person person = new Person("張三");
        p = person;
    }
}

運(yùn)行結(jié)果:

李四
李四

修改changePerson()方法代碼為:

public static void changePerson(Person p) {
    p.setName("張三");
}

運(yùn)行結(jié)果:

李四
張三

總結(jié)

到此這篇關(guān)于Java中值傳遞和引用傳遞的文章就介紹到這了,更多相關(guān)Java值傳遞和引用傳遞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA面試題之緩存擊穿、緩存穿透、緩存雪崩的三者區(qū)別

    JAVA面試題之緩存擊穿、緩存穿透、緩存雪崩的三者區(qū)別

    當(dāng)服務(wù)器QPS比較高,并且對數(shù)據(jù)的實(shí)時(shí)性要求不高時(shí),往往會(huì)接入緩存以達(dá)到快速Response、降低數(shù)據(jù)庫壓力的作用,常用來做緩存的中間件如Redis等。本文主要介紹了JAVA面試時(shí)??嫉木彺鎿舸⒋┩?、雪崩場景三者區(qū)別,有興趣的小伙伴可以看一下
    2021-11-11
  • Java實(shí)現(xiàn)一個(gè)順序表的完整代碼

    Java實(shí)現(xiàn)一個(gè)順序表的完整代碼

    順序表是用一段物理地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)數(shù)據(jù)元素的線性結(jié)構(gòu),一般采用數(shù)組存儲(chǔ)。在數(shù)組上完成數(shù)據(jù)的增刪減改。順序表的底層是一個(gè)數(shù)組
    2021-04-04
  • RestTemplate文件上傳下載與大文件流式下載

    RestTemplate文件上傳下載與大文件流式下載

    這篇文章主要為大家介紹了RestTemplate文件上傳下載與大文件流式下載的使用方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步
    2022-03-03
  • SpringKafka消息發(fā)布之KafkaTemplate與事務(wù)支持功能

    SpringKafka消息發(fā)布之KafkaTemplate與事務(wù)支持功能

    通過本文介紹的基本用法、序列化選項(xiàng)、事務(wù)支持、錯(cuò)誤處理和性能優(yōu)化技術(shù),開發(fā)者可以構(gòu)建高效可靠的Kafka消息發(fā)布系統(tǒng),事務(wù)支持特性尤為重要,它確保了在分布式環(huán)境中的數(shù)據(jù)一致性,感興趣的朋友一起看看吧
    2025-04-04
  • 解決RedisTemplate存儲(chǔ)至緩存數(shù)據(jù)出現(xiàn)亂碼的情況

    解決RedisTemplate存儲(chǔ)至緩存數(shù)據(jù)出現(xiàn)亂碼的情況

    這篇文章主要介紹了解決RedisTemplate存儲(chǔ)至緩存數(shù)據(jù)出現(xiàn)亂碼的情況,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • SpringBoot實(shí)現(xiàn)自定義啟動(dòng)器的示例詳解

    SpringBoot實(shí)現(xiàn)自定義啟動(dòng)器的示例詳解

    雖然Spring官方給我們提供了很多的啟動(dòng)器供我們使用,但有時(shí)候我們也會(huì)遇到某些特殊場景,這些啟動(dòng)器滿足不了。這個(gè)時(shí)候就需要自定義一個(gè)啟動(dòng)器供我們使用,本文為大家介紹了SpringBoot實(shí)現(xiàn)自定義啟動(dòng)器的方法,希望對大家有所幫助
    2023-01-01
  • Java基于二叉查找樹實(shí)現(xiàn)排序功能示例

    Java基于二叉查找樹實(shí)現(xiàn)排序功能示例

    這篇文章主要介紹了Java基于二叉查找樹實(shí)現(xiàn)排序功能,結(jié)合實(shí)例形式分析了Java二叉查找樹的定義、遍歷及排序等相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • Spring Boot系列教程之死信隊(duì)列詳解

    Spring Boot系列教程之死信隊(duì)列詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot系列教程之死信隊(duì)列的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Java spring單點(diǎn)登錄系統(tǒng)

    Java spring單點(diǎn)登錄系統(tǒng)

    這篇文章主要介紹了Java spring單點(diǎn)登錄系統(tǒng),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 基于SpringBoot接口+Redis解決用戶重復(fù)提交問題

    基于SpringBoot接口+Redis解決用戶重復(fù)提交問題

    當(dāng)網(wǎng)絡(luò)延遲的情況下用戶多次點(diǎn)擊submit按鈕導(dǎo)致表單重復(fù)提交,用戶提交表單后,點(diǎn)擊瀏覽器的【后退】按鈕回退到表單頁面后進(jìn)行再次提交也會(huì)出現(xiàn)用戶重復(fù)提交,辦法有很多,我這里只說一種,利用Redis的set方法搞定,需要的朋友可以參考下
    2023-10-10

最新評論