Java:为什么要更改数组';函数中的地址,当我们从该函数返回时是否会更改其地址?
我的意思是,当我们从该函数返回时,数组的地址与我们进入该函数之前的地址相同。 例如:Java:为什么要更改数组';函数中的地址,当我们从该函数返回时是否会更改其地址?,java,arrays,function,memory-address,Java,Arrays,Function,Memory Address,我的意思是,当我们从该函数返回时,数组的地址与我们进入该函数之前的地址相同。 例如: 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
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'?
}
}
感谢您的帮助这是因为对
obj
的引用是通过值传递到func
的。因此,在方法func
中,您已将本地引用更改为新数组,但main的obj
仍然引用原始数组。在Java中,数组也是对象,因此数组被声明为引用,就像普通对象一样。这是因为对obj
的引用是通过值传递到func
中的。因此,在方法func
中,您已将本地引用更改为新数组,但main的obj
仍然引用原始数组。在Java中,数组也是对象,因此数组被声明为引用,就像普通对象一样。在调用的函数中obj
是数组引用的副本。因此,当您输入func
时,您就有了
main::obj --> int[7];
func::obj --> int[7];
分配新数组后,您有
main::obj --> int[7];
func::obj --> int[13];
参数是按值传递的,因此会创建参数的副本。当它是参考时,参考的副本指向原始对象;对引用的更改是该方法的本地更改(但对对象本身的更改由所有引用共享!)
如果您已经这样做了,请明确最后一点,而不是指定一个新的引用,例如
void func(int[] obj) {
obj[1] = 69;
}
然后,在调用的函数中,可以从
main::obj
看到更改obj
是数组引用的副本。因此,当您输入func
时,您就有了
main::obj --> int[7];
func::obj --> int[7];
分配新数组后,您有
main::obj --> int[7];
func::obj --> int[13];
参数是按值传递的,因此会创建参数的副本。当它是参考时,参考的副本指向原始对象;对引用的更改是该方法的本地更改(但对对象本身的更改由所有引用共享!)
如果您已经这样做了,请明确最后一点,而不是指定一个新的引用,例如
void func(int[] obj) {
obj[1] = 69;
}
然后可以从main::obj
- 这是因为当您将obj数组传递给func()时,它实际上创建了 数组“obj”的一个副本,然后将其作为参数传递 因此,对副本的任何更改都不会影响您的原始“obj”
- 这是因为当您将obj数组传递给func()时,它实际上创建了 数组“obj”的一个副本,然后将其作为参数传递 因此,对副本的任何更改都不会影响您的原始“obj”