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