在JAVA中遇见传递句柄时,遇到的别名问题
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 所指向的地址
??? buffer4此时变成了buffer2的别名,
最后,你打出来的buffer4其实还是你以前开始初始化的那个??? 这样解释可以吗??希望学习O(∩_∩)O哈哈~