我遇到過兩種情況。如何傳遞Object作爲參數與傳遞Array作爲參數不同?
其中一個數組作爲參數傳遞給方法,如果它在被調用方法中更新,它也反映在調用方法中。
但在第二種情況下,字符串對象作爲參數傳遞。該對象在被調用的方法中更新,但它不反映在調用方法中。
我想了解兩者之間的區別,即使在這兩種情況下,值(參考)都作爲參數傳遞。請參閱下面的片段。
方案1:
class Test {
public static void main(String[] args){
int a[] = {3,4,5};
changeValue(a);
System.out.println("Value at Index 1 is "+a[1]);
}
public static void changeValue(int b[]){
b[1] = 9;
}
}
輸出:
Value at Index 1 is 9
在此,參考(存儲器地址)相關的陣列a
被傳遞給changeValue
。因此,b
只是指向與a
相同的地址。 因此,無論我說的是b[1]
還是a[1]
,都是指相同的內存地址。
方案2:
public class Test {
public static void main(String[] args){
String value = "abc";
changeValue(value);
System.out.println(value);
}
public static void changeValue(String a){
a = "xyz";
}
}
輸出:
abc
如果我在此適用同樣的邏輯,字符串對象值的參考(存儲器地址)被傳遞給changeValue,其通過a
收到。 因此,現在的a
應該指的是與VALUE相同的內存位置。因此,執行a="xyz"
時,應該用"xyz"
代替。
有人可以指出我的理解出錯的地方嗎?提前致謝!!
不變性是這裏的一種紅鯡魚。 – 2011-12-31 16:28:18
是的,在這種情況下,它根本就沒有關係。編輯。 – fge 2011-12-31 16:33:10