2015-05-10 53 views
1

我有這段代碼。如果對象爲空,爲什麼我會得到「DOG」?在這種情況下是否提供了參考?在Java中的方法更新對象

static void met1(Object ob) { 
    ob = null; 
} 

public static void main(String[] args) { 
    String a = new String("dog"); 
    met1(a); 
    System.out.println(a); 
} 
+2

http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value –

回答

1

當調用met1方法時,傳遞參考a的副本。 met1方法的堆棧幀將有一個引用地址,現在它被作爲ob處理。當將ob的值更改爲null時,引用變爲null。在方法的退出過程中,所有這些參數值都會被破壞,而原始的主要方法仍然具有指向a的原始參考。如果應該從met1方法返回空值,則代碼應該如下修改:

  a=met1(a) 

     static String met1(Object ob) 
     { 
     return null; 
     } 
2

當調用方法met1時,實際上是將引用的副本傳遞給方法,因爲更改複製的引用不會影響原始引用值。

0

通過引用不會影響傳遞的原始引用。