随笔-4  评论-2  文章-0  trackbacks-0
最近在做项目时碰到关于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 星光 阅读(237) 评论(2)  编辑  收藏

评论:
# re: 关于JAVA中的值传递与引用传递增 2008-09-05 15:33 |
很经典的值类型和引用类型的例子,俺赞同你的理解
java编程思想上说还有一种理解就是不区分什么值类型、引用类型,统统都是值类型,rt也是一个值,只不过这个值是一个指向存放对象队中的地址

怎么说都对,呵呵,理解精髓  回复  更多评论
  
# re: 关于JAVA中的值传递与引用传递增[未登录] 2008-09-05 17:18 | 星光
嗯,我也不知道理解的正确与否,只是希望大家看一下,希望对在这方面有问题的人有所帮助。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: