关于函数传参的一些问题,下来我们就来看看吧!
- 基本数据类型传参,传的是常量在常量池中的地址;
- 引用数据类型传参,传的是对象在堆内存中的地址。
总之,我们只需记住一点,实参——>形参,传的永远是地址。
先来说一下基本数据类型和引用数据类型的区别:
基本数据类型 是原子型数据,就是不可再拆分
引用数据类型 是复合型数据,在当前对象数据中,还包括了其他更多的子数据。
eg: int a,b,c;——> arr [a,b,c]
人:姓名 年龄 性别 身高 体重....
所谓复合型数据,指的就是由多个基本数据或其他引用数据组成的一个数据。
然后再来说一下传参的具体分析:
1. 首先,形参变量永远不可能去改变实参中已储存的数据地址,除非return 实参且接收。
2. 就算形参变量所存储的数据地址被改变,那也是改变形参自己,与实参无关。
3. 无非是:实参本身指向的是一个对象,然后实参把这个对象的地址传递给了形参,这样形参就可以通过访问该地址去堆内存中找对象,然后就可以修改对象中的数据。等到实参再去访问对象时,对象中的数据就已经被改变,因为实参和形参目前使用操作的都是同一个对象!
总结:无论实参还是形参,它们们都是变量!实参就是把变量空间所存的地址给了形参而已
所以对于变量的修改而言,主要分两种!
①.要么改变该变量空间所存储的地址
int a=3;
a=7;//这就是改变了该变量空间所存储的地址
int[] arr=new int[]{1,2,3};
arr=new int[]{3,2,1};//这也是改变了该变量空间所存储的地址
2.要么改变该变量空间所存储的地址所指向的那个对象中的数据
int[] arr=new int[]{1,2,3};
arr[0]=10; //这就是改变该变量空间所存储的地址所指向的那个对象中的数据
最后请问:对于基本数据类型而言,能否支持2操作?
答案是不能,因为基本数据类型已经是原子型数据,不能够再拆分。
最后,我想说的是,一定要弄清楚传参传的是什么,要搞明白其中的原理!