值傳遞是指基本數(shù)據(jù)類型在方法中的傳遞,引用傳遞是指引用數(shù)據(jù)類型在方法中的傳遞。
舉例來說,如下圖程序代碼運行所示: (推薦學(xué)習(xí):web前端視頻教程)
注:int屬于基本數(shù)據(jù)類型,因此在方法中進(jìn)行傳遞和引用時,并不會改變該變量的數(shù)值
而arr屬于數(shù)組,是引用數(shù)據(jù)類型,因此在方法引用時,實際傳遞的是該數(shù)組在堆內(nèi)存中的物理內(nèi)存地址,在方法中對該數(shù)組進(jìn)行操作,則會影響到該數(shù)組內(nèi)部的數(shù)值,會發(fā)生改變
原因:
在java中,基本數(shù)據(jù)類型作為參數(shù)傳遞的時候叫做值傳遞,傳的是值本身,
值傳遞:值在該方法中改變屬于局部變量改變
當(dāng)出了該方法就沒有作用了(方法中的傳遞的基本數(shù)據(jù)類型就屬于局部變量)
在java中,方法的傳參,引用數(shù)據(jù)類型,傳的是物理內(nèi)存地址值,當(dāng)方法中對數(shù)組內(nèi)部的數(shù)值進(jìn)行改變時,并未改變該數(shù)組的物理內(nèi)存地址,所以當(dāng)返回到主方法中,數(shù)組還是指向原來的地址。
當(dāng)傳入arr數(shù)組在內(nèi)存中的地址值后,堆內(nèi)存中的連續(xù)地址發(fā)生改變,可以影響數(shù)組整體
特例:String /基本數(shù)據(jù)類型包裝類,雖然都是引用數(shù)據(jù)類型,但是在發(fā)生傳參的時候,它們傳的是值