最近在做项目时碰到关于java值传递和引用传递的问题,查不了少文章,做了几个例子才搞明白,当然我总结出来的不一定是对的,欢迎大家来拍砖。主要有以下两条:
1.如果是基本类型,那么传递进去的就是值传递。
2.如果不是基本类型,那么传递进去的就是对象引用的拷贝。
以下是例子:
public class Test {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Test1 {
private static Test staticTest;
public static void main(String[] args) {
Test t1 = new Test();
call(t1);
System.out.println(t1.getName());
}
public static void call(Test rt) {
staticTest = new Test();
staticTest.setName("abc");
rt.setName("cba");
rt = staticTest;
}
}
此时的运行结果是什么?机器给出的结果是“cba”,为什么会这样,我理解如下:
rt.setName("cba");
此时rt是t1的一个复制,但是又不代表t1,但是rt和t1都指向同一个对象,无论通过rt还是t1来都会改变所引用对象的值。
rt = staticTest;
这时会把staticTest的引用赋给rt,但是rt只是t1的一个引用, rt此时指向staticTest,但是不会更改t1的值。
所以会发生以上的结果。不知道正确与否?
posted on 2008-09-05 14:48
星光 阅读(243)
评论(2) 编辑 收藏