内容引自:
http://blog.youkuaiyun.com/faintbear/archive/2004/11/29/198021.aspx
Java中方法参数的传递方式:对象是传递引用,基本数据类型是传递值。
先看如下代码:
package demo;
public class Test {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void call(Test t) {
Test t2 = new Test();
t2.setName("cba");
t.setName("abc");
t = t2;
}
public static void main(String[] args) {
Test obj = new Test();
call (obj) ;
System.out.println("obj:"+obj.getName());
}
}
<PRE>输出结果为:<STRONG>obj:abc</STRONG>
分析如下:
总共构建了两个Test对象,假设称main方法构建的对象为“对象1”,call方法构建的对象为“对象2”, 在main方法中,变量obj获得了“对象1”的句柄, 在参数传递中,变量obj把这个句柄传递给变量t, 在call方法中,变量t首先改变了“对象1”的属性,然后变量t又获得了“对象2”的句柄(但obj仍然是“对象1”的句柄), call方法返回后,由于“对象2”失去了唯一的句柄,不可避免的进入垃圾收集器的视线。而obj仍然是“对象1”的句柄,由于“对象1”的属性已经被重新设置,所以我们可以看到打印出来的结果是“abc”。