Java--java方法中对象的传值传参问题

对于java中引用类型的传递一直不太清楚,专门写一下防止忘记。

首先新建了一个TestPass的类,里面只有一个整型的成员变量a,而且是用public修饰的。


其他啥都没写,简单纯粹。

OK,然后在Main类里面写了一个静态的changePass方法如下:


这个方法就是新建一个对象testPass1,这个对象中的a赋值为5,然后将新建的对象赋给传进来的testPass,然后在main函数中如此操作:

新建一个TestPass的对象testPass,a赋值为3,然后调用changePass方法,输出调用之后testPass的a的值为:

然后我们队changePass的方法稍加修改:


main函数不变,输出的结果就变成了5。

所以分析下来java方法中变量的传递是值的传递,即将变量复制了一份传到方法中去。

我们再来看看对象在java虚拟机中的存储情况,以Hotspot虚拟机为例,采用的是直接引用法:



这里的reference就是引用类型,类似于C中的指针,在这里就是表示为testPass变量

那么在当前这个例子中的体现就是这样:


将testPass的引用复制了一份传给了changePass,这个副本同样指向堆中的testPass对象,本文中第一版的changePass是对testPass引用的副本进行操作,对引用的原本和对象不产生印象。第二版的changePass是对引用指向的对象的操作,所以testPass原版指向的对象中的a的值也会改变。

综上,java方法中采用的是传值方式,传递的方式是传值,传递的是对象的引用。

你可能感兴趣的:(Java--java方法中对象的传值传参问题)