我遇到过两种情况。如何传递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