在java中,传递对象的方式其实只有一种,都是传递实际参数的一个副本。但是为什么会有值传递和引用传递的疑惑呢?
其实这主要是因为java的内存分配的关系。下面我们通过一个图来说明。
因为基本数据类型(int,long,float,byte,double等)都是保存在stack中的,所以形式参数param和实际参数real都各自占有自己的内存空间,所以形式参数param的修改不会影响到实际参数real的值。
但是,因为引用传递,因为对象引用把存在堆栈中,而对象本身是保存在堆(stack)中的,所以堆栈中的形式参数param和实际参数real都同时指向堆中的对象,所以param的修改会影响到实际参数real的值。