如下关于对象与引用的代码,运行结果分析

  1. public class MyClass{   
  2.     static void aMethod(StringBuffer sf1,StringBuffer sf2{   
  3.         sf1.append(sf2);   
  4.         sf2 = sf1;   
  5.     }   
  6.     public static void main(String[] args){   
  7.         StringBuffer sf1 = new StringBuffer("A");   
  8.         StringBuffer sf2 = new StringBuffer("B");   
  9.         aMethod(sf1,sf2);   
  10.         System.out.println(sf1+":"+sf2);   
  11.     }   
  12. }  
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指向的对象没有任何变化

你可能感兴趣的:(对象)