java方法的参数传递

java 里方法的参数传递只有一种类型:值传递;即将实际参数数值的复制品,传递到方法内,实际参数值本身不变。一般我们传递的参数可以分为两类,一类是基本类型的参数,另一类是引用对象的参数。要想区分这两个,首先需要了解java中jvm的内存模型。如下:

                         

1.了解完jvm的内存模型后,我们先了解一下基本类型的参数传递,假设 为我们需要传入的实参,i 为与实参对应的形参,jvm则将实参和形参分别存入栈stack中,效果如下图:

                        

 因此基本类型的参数传递中,形参的数值改变不会引起相应的实参的数值发生改变(因为他们存放在不同的地址中)。

2.引用对象的参数

由jvm内存机制我们可以了解到,我们自己定义的对象的数据存在堆heap中,当我们引用对象时,就会把对象的数据在堆中的地址存储在栈中。即栈中实参的值就是我们引用的对象的数据在堆中的地址。而我们java中方法参数传递都是值传递,故实参会把地址复制一份给形参,效果如下图:

                    

所以对象类型的参数在方法中形参所引用的地址的数据变化时,相应实参的数据也会变化。

原文地址:https://www.cnblogs.com/wfswf/p/14616398.html