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