浏览 1731 次
锁定老帖子 主题:在JAVA中遇见传递句柄时,遇到的别名问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-02-21
public class test { public void change(StringBuffer buffer1,StringBuffer buffer2,StringBuffer buffer3,StringBuffer buffer4) { buffer1=new StringBuffer("AA"); buffer2.append("BB"); buffer3=buffer1; buffer4=buffer2; buffer4.append("DD"); } /** * @param args */ public static void main(String[] args) { StringBuffer buffer1=new StringBuffer("aa"); StringBuffer buffer2=new StringBuffer("bb"); StringBuffer buffer3=new StringBuffer("cc"); StringBuffer buffer4=new StringBuffer("dd"); test test=new test(); test.change(buffer1, buffer2, buffer3, buffer4); System.out.println("--1--"+buffer1); System.out.println("--2--"+buffer2); System.out.println("--3--"+buffer3); System.out.println("--4--"+buffer4); } } 这是java中值传递过程中的别名问题,在调用方法的过程中 只是调用对象的句柄 *在方法里的buffer1在new 后已经是一个新对象(此时buffer3也是此句柄的别名),它生命周期在方法调用完毕已经结束所以打印的是初始化的buffer1 *在方法里 buffe4=buffer2 看似对buffer4的操作 但此时实际是进行了对buffer2所指向的操作,他们共同指向buffer2 所指向的地址 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |