Java:为什么在一个函数中更改数组的地址,在我们从该函数返回时不更改它的地址?
我的意思是,当我们从该函数返回时,数组的地址仍然与我们进入该函数之前的地址相同。 举个例子:
class sdasd {
public static void main(String[] args){
int[] obj = new int [7];
//obj has an address
sdasd t = new sdasd();
t.func(obj);
//obj has the same address as before!!
}
void func(int[] obj){
int[] otherObj = new int[13];
obj=otherObj;``
//we changed the address of the array 'obj'?
}
}
谢谢你的帮助
# 1 楼答案
这是因为对
obj
的引用通过值传递到func
。因此,在方法func
中,您已将本地引用更改为新数组,但main的obj
仍然引用原始数组。在Java中,数组也是对象,所以数组被声明为引用,就像普通对象一样# 2 楼答案
在被调用的函数中
obj
是数组引用的副本。所以,当你输入func
时,你有什么可以描述为分配新数组后,您将
参数是按值传递的,因此会创建参数的副本。当它是参考时,参考的副本指向原始对象;对引用的更改是该方法的本地更改(但对对象本身的更改由所有引用共享!)
把最后一点说清楚,如果你已经这样做了,而不是指定一个新的参考,比如
然后,可以从
main::obj
看到更改