关于基本类型和引用类型的参数传递问题总结
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指向的地址吗?不会。我把复制的钥匙给你了,好家伙你不开我家的门,在里面干点什么。反而你去开别人的门去了,跟我没关系了好吧。
所以我家的东西没变。

浙公网安备 33010602011771号