Java中的参数传递传的是值value,而非对象的引用reference.
Java中,我们通过如下方法得到一个对象:
ArrayList aList = new ArrayList();
在此过程中,实际上生成了两个对象,一个是new ArrayList(),另一个是aList.Java中的对象名就是一个引用.什么是引用?从某种意义上讲,它与C中的指针有着相似之处,在我探讨的这个话题中,就可以把它看成指向某一内存地址的指针。
先看下面一个Java参数传递的例子:
import java.awt.Point;
class PassByValue
{
public static void modifyPoint(Point pt, int j)
{
pt.setLocation(5,5);
//1
j = 15;
System.out.println("During modifyPoint " + "pt = " + pt +" and j = " + j);
}
public static void main(String args[])
{
Point p = new
Point(0,0);
//2
int i = 10;
System.out.println("Before modifyPoint " + "p = " + p +" and i = " + i);
modifyPoint(p,
i);
//3
System.out.println("After modifyPoint " + "p = " + p +" and i = " + i);
}
}
在输出的结果中,Point对象的属性改变了,而int型数据i没有改变.于是一些人就草率地下结论说:Java中产数传递传的是引用!
仔细一想,会发现其中的问题.Java中定义的对象名就相当于一个指针,把它作为一个参数赋给一个方法的argument,实际上传的就是这个引用的
值.在这个过程中并没有构建新的对象,而是直接把原来指向对象的引用传到了方法中,因此方法中通过这个argument进行的改变都会影响到调用这个方法的主函数中对象的属性值.