内容引自:http://blog.csdn.net/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()); } }输出结果为:obj:abc
分析如下:
总共构建了两个Test对象,假设称main方法构建的对象为“对象1”,call方法构建的对象为“对象2”,
在main方法中,变量obj获得了“对象1”的句柄,
在参数传递中,变量obj把这个句柄传递给变量t,
在call方法中,变量t首先改变了“对象1”的属性,然后变量t又获得了“对象2”的句柄(但obj仍然是“对象1”的句柄),
call方法返回后,由于“对象2”失去了唯一的句柄,不可避免的进入垃圾收集器的视线。而obj仍然是“对象1”的句柄,
由于“对象1”的属性已经被重新设置,所以我们可以看到打印出来的结果是“abc”。