詳解java的值傳遞、地址傳遞、引用傳遞
詳解java的值傳遞、地址傳遞、引用傳遞
一直來覺得對值傳遞和地址傳遞了解的很清楚,剛才在開源中國上看到一篇帖子介紹了java中的值傳遞和地址傳遞,看完后感受頗深。下邊總結下以便更容易理解。
按照以前的理解,java中基本數據類型是值傳遞,對象是地址(引用)傳遞。給大家看個例子:
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"; } }
大家思考下,這個例子輸出的結果應該是123呢還是234呢?結果是123。why?一句話表達:對象也是值傳遞,只是把這個對象的引用copy了一份。
其實java本來就是值傳遞,沒有c++那樣的指針傳遞,分步分析下上邊的代碼:
1、name = "123"
2、調用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"); } }
那么這段代碼輸出的結果應該是什么呢?答案是123234,why?同樣分步分析:
1、name = "123"
2、調用SChange str 和 name 共同指向 “123”(拷貝name的引用賦給str)
3、改變所指向對象的值"123"+"234"
4、引用沒變只是值變了,所以結果為123234
如果不明白請留言,自己好好分析下。。。請記住一句話:java只有值傳遞。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
Java使用NIO包實現(xiàn)Socket通信的實例代碼
本篇文章主要介紹了Java使用NIO包實現(xiàn)Socket通信的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02MyBatis-Plus如何使用枚舉自動關聯(lián)注入詳解
這篇文章主要給大家介紹了關于MyBatis-Plus如何使用枚舉自動關聯(lián)注入的相關資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用MyBatis-Plus具有一定的參考學習價值,需要的朋友可以參考下2022-03-03詳解Java并發(fā)編程中的優(yōu)先級隊列PriorityBlockingQueue
PriorityBlockingQueue是Java中實現(xiàn)了堆數據結構的線程安全的有界阻塞隊列。本文將會深入解讀PriorityBlockingQueue的源碼實現(xiàn),感興趣的可以了解一下2023-05-05