當一個對象被當作參數(shù)傳遞到一個方法后议谷,此方法可改變這個對象的屬性俘陷,并可返回變化后的結(jié)果尸诽,那么這里到底是值傳遞還是引用傳遞?
答:是值傳遞硝皂。Java 編程語言只有值傳遞參數(shù)。當一個對象實例作為一個參數(shù)被傳遞到方法中時蛙吏,參數(shù)的值就是該對象的引用一個副本源哩。指向同一個對象,對象的內(nèi)容可以在被調(diào)用的方法中改變,但對象的引用(不是引用的副本)是永遠不會改變的鸦做。
_ Java參數(shù)励烦,不管是原始類型還是引用類型,傳遞的都是副本(有另外一種說法是傳值泼诱,但是說傳副本更好理解吧坛掠,傳值通常是相對傳址而言)。_
如果參數(shù)類型是原始類型治筒,那么傳過來的就是這個參數(shù)的一個副本屉栓,也就是這個原始參數(shù)的值,這個跟之前所談的傳值是一樣的耸袜。如果在函數(shù)中改變了副本的 值不會改變原始的值.
如果參數(shù)類型是引用類型友多,那么傳過來的就是這個引用參數(shù)的副本,這個副本存放的是參數(shù)的地址堤框。如果在函數(shù)中沒有改變這個副本的地址域滥,而是改變了地址中的值,那么在函數(shù)內(nèi)的改變會影響到傳入的參數(shù)胰锌。如果在函數(shù)中改變了副本的地址,如new一個藐窄,那么副本就指向了一個新的地址资昧,此時傳入的參數(shù)還是指向原來的地址,所以不會改變參數(shù)的值荆忍。
ps:“在Java里面參數(shù)傳遞都是按值傳遞”這句話的意思是:按值傳遞是傳遞的值的拷貝格带,按引用傳遞其實傳遞的是引用的地址值撤缴,所以統(tǒng)稱按值傳遞。