参数传对象即传引用

Java中,参数定义为传递一个对象,那么传递进来的是对象的引用,或者说是句柄/对象的别名,其实跟C/C++里面这样的传递:void fun (int &a)是差不多的,而对象的引用/句柄可以理解为指向对象内存空间的一个指针/首地址。所以理所应当的若函数里面对传进来的对象的属性值做了修改的话,是会影响外面的对象的。

下面是一个简单的示例:

随便写一个类:A.java:

/**
 * A.java
 * @author 吕浪
 * @My Email:784975698@qq.com
 * @Created on 2016年7月30日
 */
package com;

public class A {
	private int a;
	A()
	{
		a = 0;
	}
	public void set(int a)
	{
		this.a = a;
	}
	public int get()
	{
		return a;
	}
}

然后主文件中利用一个函数对这个类的对象进行属性进行修改,看修改会不会反映到函数外面,TestForArgsPass.java:

/**
 * TestForArgsPass.java
 * @author 吕浪
 * @My Email:784975698@qq.com
 * @Created on 2016年7月30日
 */
package com;

public class TestForArgsPass {
	public static void modify(A obj)
	{
		obj.set(4);
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A t1 = new A();
		modify(t1);
		System.out.println(t1.get());
	}

}

运行程序得到的输出为4,所以说把对象t1传进了函数modify并做了属性值修改之后,同样影响了函数外头的t1对象的属性值。说明二者操作的是同样的内存空间。

突然想到火影忍者里面也有类似的情节,卡卡西和带土大家都有空间穿越的功能,并且因为大家使用的是同一个人身上的写轮眼,所以大家进去的异空间是一样的……算了不扯了,总之函数传递对象参数进去时传递的是对象的引用,修改会影响源对象。

原文地址:https://www.cnblogs.com/lvlang/p/10586426.html