关于函数传参的一些问题

关于函数传参的一些问题,下来我们就来看看吧!

  • 基本数据类型传参,传的是常量在常量池中的地址;
  • 引用数据类型传参,传的是对象在堆内存中的地址。

总之,我们只需记住一点,实参——>形参,传的永远是地址。

先来说一下基本数据类型和引用数据类型的区别:

基本数据类型   是原子型数据,就是不可再拆分

引用数据类型   是复合型数据,在当前对象数据中,还包括了其他更多的子数据。

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操作?

答案是不能,因为基本数据类型已经是原子型数据,不能够再拆分。

 

最后,我想说的是,一定要弄清楚传参传的是什么,要搞明白其中的原理!

发布了18 篇原创文章 · 获赞 25 · 访问量 3859

猜你喜欢

转载自blog.csdn.net/Agonyq/article/details/104399729