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

  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指向的对象没有任何变化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值