- public class MyClass{
- static void aMethod(StringBuffer sf1,StringBuffer sf2{
- sf1.append(sf2);
- sf2 = sf1;
- }
- public static void main(String[] args){
- StringBuffer sf1 = new StringBuffer("A");
- StringBuffer sf2 = new StringBuffer("B");
- aMethod(sf1,sf2);
- System.out.println(sf1+":"+sf2);
- }
- }
public class MyClass{ static void aMethod(StringBuffer sf1,StringBuffer sf2{ sf1.append(sf2); sf2 = sf1; } public static void main(String[] args){ StringBuffer sf1 = new StringBuffer("A"); StringBuffer sf2 = new StringBuffer("B"); aMethod(sf1,sf2); System.out.println(sf1+":"+sf2); } }
这个结果为啥是AB:B啊?
分析:
1 主方法以引用的方式传递过去了2个对象 StringBuffer
2 方法里也有2个引用作为参数也指向了这2个对象,他们是sf1 和 sf2, 注意此处的sf1和main方法的sf1可不是同一个,他们有着不同的作用域。
3 调用方法,修改了对象的内容,所以此时 sf1指向的对象内容为 AB
4 将方法里的sf2 指向了 sf1, 这个操作之影响调用方法里的参宿引用,并不影响main方法里的引用
5 返回了, main方法里 sf1指向的对象已经变成了 AB, 而sf2指向的对象没有任何变化