关于基本类型和引用类型的参数传递问题总结

1.基本类型


主方法调用change方法时,将number传进去。change拿到该实参后,会自己在自身的栈空间中复制一份number=200,就注定复制的这份今后和主方法无关了。随便自己怎么修改都不会对主方法的number=200产生任何影响!

2.引用类型(拿的是地址)

change方法接收到了arr所指向的地址,所以可以对堆空间对应地址中元素为所欲为。他相当于复制了一份arr变量,然后将该变量存储传进来的地址。也就是复制了一把钥匙,可以打开和主方法中的同一扇门去随便修改房间的东西。

`

static void main() {

int[] arr = {10, 20, 30};
System.out.println(("调用change方法前:" + arr[1]));
System.out.println(arr);
//将arr的地址传到change方法中去
change(arr);
//方法调用结束后,主方法中的数组地址未被修改
System.out.println(("调用change方法后:" + arr[1]));
System.out.println(arr);

}

static void change(int[] arr) {
/**
* 接收到的数组地址和主方法中的数组地址相同
* 此方法中的arr是方法自己的变量,和主方法中的arr无关噢
/
arr = new int[3];
/
*
* 此时在栈中新开辟了一个地址赋值给arr
* 该数组的地址只在该方法中有效,并未修改主方法中数组地址的指向
*/
System.out.println(arr);
}

`
此时注意还是一样的道理,change方法开辟了新的属于自己的栈空间,接收到了主方法中数组的地址并赋值给自己栈中的变量arr,使arr指向主方法中数组的地址,但是给你地址你不用,你非要自己去在堆空间中新开辟一个地址存在arr中。这么一操作,你说此时会修改主方法中arr指向的地址吗?不会。我把复制的钥匙给你了,好家伙你不开我家的门,在里面干点什么。反而你去开别人的门去了,跟我没关系了好吧。
所以我家的东西没变。

posted @ 2022-09-05 21:34  i南栀  阅读(67)  评论(0)    收藏  举报