我有這段代碼。如果對象爲空,爲什麼我會得到「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);
}
我有這段代碼。如果對象爲空,爲什麼我會得到「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);
}
當調用met1方法時,傳遞參考a的副本。 met1方法的堆棧幀將有一個引用地址,現在它被作爲ob處理。當將ob的值更改爲null時,引用變爲null。在方法的退出過程中,所有這些參數值都會被破壞,而原始的主要方法仍然具有指向a的原始參考。如果應該從met1方法返回空值,則代碼應該如下修改:
a=met1(a)
static String met1(Object ob)
{
return null;
}
當調用方法met1時,實際上是將引用的副本傳遞給方法,因爲更改複製的引用不會影響原始引用值。
通過引用不會影響傳遞的原始引用。
http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value –