Java中的值傳遞和引用傳遞

今天復(fù)習(xí)Java基礎(chǔ),發(fā)現(xiàn)有一個(gè)概念好像有點(diǎn)模糊了,就是值傳遞,Think in Java中說Java只有值傳遞。

上網(wǎng)看了好多的博客分析,各有各的說法,有的說只有值傳遞,有的說有值傳遞和引用傳遞,爭(zhēng)論的焦點(diǎn)就是對(duì)象的傳遞。

系統(tǒng)的說一下:Java中有2種參數(shù)傳遞,一種是基本類型參數(shù),一種是引用類型參數(shù)。

基本類型參數(shù)的傳遞方式基本沒有什么爭(zhēng)論,即:Java應(yīng)用程序中在傳遞基本類型參數(shù)時(shí)會(huì)copy一份值,因?yàn)榛绢愋偷闹凳谴嬖跅V械?,也就是?dāng)你在方法中改變參數(shù)的值是不會(huì)影響調(diào)用者的值的。

引用類型參數(shù)的傳遞方式有爭(zhēng)論:我認(rèn)為是引用傳遞,但是從嚴(yán)格意義上來講,引用也是棧中的值,引用指向的堆中的對(duì)象就是值。不管怎么樣,引用類型的參數(shù)傳遞就是引用傳遞,但是那個(gè)引用指向的堆中對(duì)象還是調(diào)用者的對(duì)象,所以也可以理解為值傳遞。

引用一下一位同學(xué)的話:
“其實(shí)按值還是按引用的區(qū)別在于‘是否在傳遞的時(shí)候進(jìn)行對(duì)象的內(nèi)存拷貝’,java中基本類型是由于在JVM中存儲(chǔ)區(qū)域不同于普通對(duì)象所以傳遞前會(huì)拷貝,傳遞的是拷貝后的值,但是對(duì)象在傳遞的時(shí)候不拷貝,直接傳“引用值”,指向同一片對(duì)象堆內(nèi)存區(qū)域。”

在編寫Java應(yīng)用程序時(shí),需要注意傳遞基本類型參數(shù)時(shí)不能在方法中賦值,因?yàn)檫@可能得不到你想要的結(jié)果。

ps:注意string類和包裝類的final屬性。雖然是引用類型,但是每當(dāng)改變它們的時(shí)候都會(huì)創(chuàng)建新的對(duì)象。所以和基本類型的結(jié)果是一樣的。

歡迎指正。

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

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

  • 當(dāng)一個(gè)對(duì)象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對(duì)象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引...
    峰峰小閱讀 408評(píng)論 0 1
  • 引言 學(xué)習(xí)過C語言的同學(xué)都很清楚在c中調(diào)用方法的參數(shù)有值傳遞和引用傳遞兩種方式。關(guān)于值傳遞和引用傳遞網(wǎng)上有許多的博...
    寧愿呢閱讀 1,475評(píng)論 0 4
  • 方法調(diào)用是編程語言中非常重要的一個(gè)特性,在方法調(diào)用時(shí),通常需要傳遞一些參數(shù)來完成特定功能。 我們首先觀察一個(gè)簡(jiǎn)單的...
    小人物灌籃閱讀 599評(píng)論 0 0
  • DLL(Dynamic Link Library)文件為動(dòng)態(tài)鏈接庫(kù)文件,又稱“應(yīng)用程序拓展”,是軟件文件類型。在W...
    func_老衲姓羅閱讀 3,908評(píng)論 0 1
  • 永遠(yuǎn)不要給自己設(shè)限,生活時(shí)刻在變。
    斐麗希婭閱讀 136評(píng)論 0 0

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