方法参数中pass by reference(传引用)和 pass by value(传值)的区别
如果你把一個(gè)名為foo的對(duì)象作為參數(shù)傳給某個(gè)函數(shù),那么「對(duì)參數(shù)賦值」意味改變foo,使它引用(參考、指涉、指向)另一個(gè)對(duì)象。如果你在「被傳入對(duì)象」身上進(jìn)行什么操作,那沒(méi)問(wèn)題,我也總是這樣干。我只針對(duì)「foo 被改而指向(引用)完全不同的另一個(gè)對(duì)象」這種情況來(lái)討論:
void aMethod(Object foo)
{
??? foo.modifyInSomeWay(); // that's OK
??? foo = anotherObject; // 麻煩來(lái)了!
}
我之所以不喜歡這樣的作法,因?yàn)樗档土舜a的清晰度,而且混淆了pass by value(傳值)和pass by reference(傳址)這兩種參數(shù)傳遞方式。Java 只采用pass by value傳遞方式,我們的討論也正是基于這一點(diǎn)。在pass by value 情況下,對(duì)參數(shù)的任何修改,都不會(huì)對(duì)調(diào)用端造成任何影響。那些用過(guò)pass by reference 的人可能會(huì)在這一點(diǎn)上犯胡涂。
另一個(gè)讓人胡涂的地方是函數(shù)本體內(nèi)。如果你只以參數(shù)表示「被傳遞進(jìn)來(lái)的東西」,那么代碼會(huì)清晰得多,因?yàn)檫@種用法在所有語(yǔ)言中都表現(xiàn)出相同語(yǔ)義。
在Java中,不要對(duì)參數(shù)賦值;
當(dāng)然,面對(duì)那些使用「輸出式參數(shù)」(output parameters)的語(yǔ)言,你不必遵循這條規(guī)則。不過(guò)在那些語(yǔ)言中我會(huì)盡量少用輸出式參數(shù)。
總結(jié)
以上是生活随笔為你收集整理的方法参数中pass by reference(传引用)和 pass by value(传值)的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机网络多项式的定义,多项式的定义与概
- 下一篇: springboot+食堂预约订餐小程序