JAVA參數(shù)傳遞方式實例淺析【按值傳遞與引用傳遞區(qū)別】
本文實例講述了JAVA參數(shù)傳遞方式。分享給大家供大家參考,具體如下:
首先要明確的是JAVA中沒有引用傳遞, 全部是按值調(diào)用
令大家所費解的 當對象引用作為參數(shù)時 函數(shù)為什么能修改真實的對象呢?這不是引用傳遞的特征嗎?
尤其先學習C++再學習JAVA的同學(比如說我自己)會這樣認為,
用白話解釋就是:
引用傳遞指針時, 連函數(shù)操作的指針都是原來的指針,比如C++傳入對象時直接用傳入的指針操作
而JAVA的引用傳進函數(shù)時 , 會復(fù)制一個引用與實參指向同一對象的引用, 操作的不是同一個引用,
如果還不明白區(qū)別再換種方式解釋一次:
JAVA只有按值調(diào)用, 參數(shù)是什么都會復(fù)制一份再操作, 就算是對象的引用也會復(fù)制一份新的引用,只不過指向的是同一個對象
這種傳參方式叫做按值傳遞, 傳遞的東西可以是引用(類似C++的指針)
如果是引用傳遞像C++傳入指針不會再復(fù)制一份了,直接拿來用
如果再不明白也沒關(guān)系,看看下面的例子和解釋分析
舉個例子:
輸出結(jié)果:
也就說我們用一個函數(shù)修改了 傳入的一個int變量和一個對象內(nèi)容,
再輸出int變量和對象內(nèi)容時發(fā)現(xiàn) ,int的沒有改變,而 對象的內(nèi)容改變了
這說明什么呢,說明像 int ,double等基本數(shù)據(jù)類型在參數(shù)傳遞時并沒有傳進變量本身,
而是創(chuàng)建了一個新的相同數(shù)值的變量, 函數(shù)修改這個新變量并沒有影響原來變量的數(shù)值,這也是按值傳遞的特點
那為什么對象a的數(shù)據(jù)就改變了呢?
因為雖然也是按值傳遞, 復(fù)制了一份新的引用但是指向的對象是同一個,修改后會影響原對象
這種方式假如在函數(shù)內(nèi)修改 a=null; 只是把復(fù)制的引用與對象的聯(lián)系斷開,不影響函數(shù)外與實際對象
這就是按值傳遞, 即使傳的是引用也不是引用傳遞,
因為引用傳遞是不復(fù)制的,直接使用參數(shù),如下圖:
這時候函數(shù)把指針a=null就指針就置空了,函數(shù)外也無法再通過指針訪問對象了
這樣可以理解了嗎,自我覺得足夠明白了, 我如此深厚的畫圖功底都供出來了,再不明白就是在為難我胖虎!
水平有限, 可能有錯誤,敬請指出!
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java常用函數(shù)與方法技巧匯總》、《Java面向?qū)ο蟪绦蛟O(shè)計入門與進階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
ASM源碼學習之ClassReader、ClassVisitor與ClassWriter詳解
這篇文章主要給大家介紹了ASM源碼之ClassReader、ClassVisitor與ClassWriter的相關(guān)資料,文中介紹的非常相信,相信對大家的學習或者工作具有一定的參考借鑒價值,有需要的朋友可以參考借鑒,下面來一起看看吧。2017-01-01springboot的http.server.requests服務(wù)請求流程源碼
這篇文章主要為大家介紹了springboot的http.server.requests服務(wù)請求流程源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12使用JMeter進行接口高并發(fā)測試的實現(xiàn)
本文主要介紹了使用JMeter進行接口高并發(fā)測試的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-04-04使用FeignClient設(shè)置動態(tài)Url
這篇文章主要介紹了使用FeignClient設(shè)置動態(tài)Url方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06如何使用SpringBoot進行優(yōu)雅的數(shù)據(jù)驗證
這篇文章主要介紹了如何使用SpringBoot進行優(yōu)雅的數(shù)據(jù)驗證,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11