看到一個java面試題:
問:當一個對象被當作參數傳遞到一個方法后,此方法可改變這個對象的屬性,並可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞?
答:是值傳遞。Java 編程語言只有值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是該對象的引用一個副本。指向同一個對象,對象的內容可以在被調用的方法中改變,但對象的引用(不是引用的副本)是永遠不會改變的。
以下是從其他文章里轉的,只為加深理解
public class TempTest { private void test1(A a){ a.age = 20; System.out.println("test1方法中的age="+a.age); } public static void main(String[] args) { TempTest t = new TempTest(); A a = new A(); a.age = 10; t.test1(a); System.out.println(”main方法中的age=”+a.age); } } class A{ public int age = 0; }
結果是
test1方法中的age=20
main方法中的age=20
說明:在執行第10步t.test1(a); 時,main()中的變量a和test1中的變量a指向同一個地址,在test1方法中並沒有改變a的地址而是改變了屬性的值,所以結果是main方法中的a的值發生了變化,但是這不是引用傳遞。除非在test1方法中new一個新的對象,把這個新的地址賦給a,則為引用傳遞,其結果中a的值不會發生變化。