|
java中方法參數(shù)傳遞看似有兩種,值傳遞和引用傳遞。而實(shí)際上都是值傳遞。 所謂值傳遞,傳遞的是變量的副本就是說,在將變量a作為參數(shù)傳進(jìn)方法中時(shí),方法中接收到的是a的副本,在方法中對參數(shù)的修改實(shí)際上修改的是a的副本,所以不會影響到a的值。 而引用傳遞,傳遞的是變量的內(nèi)存地址。在將變量a作為參數(shù)傳遞給方法時(shí),傳遞的是a的內(nèi)存地址,在方法中對參數(shù)的修改,實(shí)際上是修改的a本身。 因?yàn)閖ava的變量有兩類,一類是基本數(shù)據(jù)類型,一類是引用類型。所以就把基本數(shù)據(jù)類型作為參數(shù)進(jìn)行傳遞時(shí),當(dāng)做了“值傳遞“;把引用類型作為參數(shù)進(jìn)行傳遞時(shí),當(dāng)做了“引用傳遞“。 事實(shí)上無論是傳遞基本數(shù)據(jù)類型還是引用類型,java中都是按“值傳遞”進(jìn)行操作的。 在引用變量r作為 參數(shù)傳到方法中時(shí),傳遞的是r的副本。只不過r和r的副本都指向了同一個對象。 public class TestParamPassing {
} ======== a: 4 在方法testValueParam(int a)中,因?yàn)槭恰爸祩鬟f”,所以傳到方法中的是原始值的副本,所以在方法中對a的修改,不會影響到原始值。 在方法testReferenceParam(List list)中,因?yàn)槭恰爸祩鬟f”,所以傳到方法中的是原始值的副本,所以兩者都指向了同一個對象,因此在方法中對對象的修改,會影響到原始值指向的對象。但是,當(dāng)在方法中,將副本指向了其他的對象,再對副本指向的對象進(jìn)行修改,就不會影響到原始值所指向的對象了。所以在傳遞引用變量時(shí),也是“值傳遞”。 |
|
|