詳解java的值傳遞、地址傳遞、引用傳遞
詳解java的值傳遞、地址傳遞、引用傳遞
一直來(lái)覺(jué)得對(duì)值傳遞和地址傳遞了解的很清楚,剛才在開(kāi)源中國(guó)上看到一篇帖子介紹了java中的值傳遞和地址傳遞,看完后感受頗深。下邊總結(jié)下以便更容易理解。
按照以前的理解,java中基本數(shù)據(jù)類型是值傳遞,對(duì)象是地址(引用)傳遞。給大家看個(gè)例子:
public class ObjectTrans { public static void main(String[] args) { String name = "123"; SChange(name); System.out.println(name); } public static void SChange (String str) { str = "234"; } }
大家思考下,這個(gè)例子輸出的結(jié)果應(yīng)該是123呢還是234呢?結(jié)果是123。why?一句話表達(dá):對(duì)象也是值傳遞,只是把這個(gè)對(duì)象的引用copy了一份。
其實(shí)java本來(lái)就是值傳遞,沒(méi)有c++那樣的指針傳遞,分步分析下上邊的代碼:
1、name = "123"
2、調(diào)用SChange str 和 name 共同指向 “123”(拷貝name的引用賦給str)
3、str 重新賦值并指向“234”
4、name指向不變還是“123”
下邊看另外一段代碼:
public class ObjectTrans { public static void main(String[] args) { StringBuilder name = new StringBuilder("123"); SChange(name); System.out.println(name); } public static void SChange (StringBuilder str) { //str = "234"; str.append("234"); } }
那么這段代碼輸出的結(jié)果應(yīng)該是什么呢?答案是123234,why?同樣分步分析:
1、name = "123"
2、調(diào)用SChange str 和 name 共同指向 “123”(拷貝name的引用賦給str)
3、改變所指向?qū)ο蟮闹?123"+"234"
4、引用沒(méi)變只是值變了,所以結(jié)果為123234
如果不明白請(qǐng)留言,自己好好分析下。。。請(qǐng)記住一句話:java只有值傳遞。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Java使用NIO包實(shí)現(xiàn)Socket通信的實(shí)例代碼
本篇文章主要介紹了Java使用NIO包實(shí)現(xiàn)Socket通信的實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02SpringBoot Tomcat啟動(dòng)實(shí)例代碼詳解
這篇文章主要介紹了SpringBoot Tomcat啟動(dòng)實(shí)例代碼詳解,需要的朋友可以參考下2017-09-09詳解使用Spring Boot開(kāi)發(fā)Web項(xiàng)目
這篇文章主要介紹了詳解使用Spring Boot開(kāi)發(fā)Web項(xiàng)目,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04MyBatis-Plus如何使用枚舉自動(dòng)關(guān)聯(lián)注入詳解
這篇文章主要給大家介紹了關(guān)于MyBatis-Plus如何使用枚舉自動(dòng)關(guān)聯(lián)注入的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MyBatis-Plus具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03詳解Java并發(fā)編程中的優(yōu)先級(jí)隊(duì)列PriorityBlockingQueue
PriorityBlockingQueue是Java中實(shí)現(xiàn)了堆數(shù)據(jù)結(jié)構(gòu)的線程安全的有界阻塞隊(duì)列。本文將會(huì)深入解讀PriorityBlockingQueue的源碼實(shí)現(xiàn),感興趣的可以了解一下2023-05-05為什么JDK8中HashMap依然會(huì)死循環(huán)
這篇文章主要介紹了為什么JDK8中HashMap依然會(huì)死循環(huán),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Java實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲示例代碼
這篇文章主要為大家介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java游戲開(kāi)發(fā)有一定幫助,需要的可以參考一下2022-05-05