在使用Java函数,常常会有一个疑问,我传过去的是参数的值还是参数的地址。
下面,说一下Java的参数传递:
首先,要说明的是Java的数据类型
在Java中只有三种引用类型:
- 类
- 接口
- 数组
除上面几种类型外的所有类型都是基本类型。
使用基本类型的时候,会把这个放入虚拟机栈中,而引用类型的变量会先在虚拟机栈中声明一个变量,然后把该变量指向在堆中存放地址。
在主函数中往声明函数传参时,主函数会有一个自己的栈,该栈中存放主函数中声明的变量值,当调用函数时,会有一个新的栈,而该栈中会有一个传递参数的副本。
当传递的是一个引用类型的变量时,同样也会创建一个声明函数栈,在该栈中也会有一个参数的副本,不过该副本和主函数上的变量在栈中指向的地址是相同的。如果在函数修改了该地址的值,主函数中变量的值也会发生变化。
如果在函数中修改了变量指向的地址,同时修改了其中的值,主函数中的变量不会有任何变化,因为主函数变量指向的地址并没有发生变化,该值也没发生变化。