关于Java的引用

 

 

关于Java的引用

 

看了几篇介绍Java引用的文章,好象都没有用图形来说明,有些读者(包括刚开始的我)越看越糊涂。现发一篇数型结合的文章,希望大家多提意见。

 

  本篇文章用的程序:

public class example {

       private static void swap(StringBuffer s1, StringBuffer s2) {

              s1.append(“append”);

              StringBuffer t;

t = s1;

              s1 = s2;

              s2 = t;

       }

 

       public static void main(String[] args) {

              StringBuffer sb1 = new StringBuffer();

              StringBuffer sb2 = new StringBuffer();

              sb1.append(“sb1”);

              sb2.append(“sb2”);

              swap(sb1,sb2);

              System.out.println(sb1);

              System.out.println(sb2);

       }

}

 

输出为:

sb1append

sb2

 

sb1的值在方法swap()中改变了,说明传递的参数是sb1的引用。那为什么sb1sb2没有交换呢?下面将用图形来解释。

 

1)见图1。还没调用方法swap()前的堆和栈,堆和栈之间的连线表示引用(或指向)

                          1

 

2)调用方法swap(),但还没有执行方法swap()中的指令。见图2

                          2

 

3)执行了s1.append(“ append”)StringBuffer t;后。见图3

                          3

 

4)执行了t = s1; 后。见图4

                          4

 

5)执行了s1 = s2 后。见图5

                           5

 

6)执行了s2 = t; 后。见图6

                          ;

                           6

 

7)方法swap()调用完,回到方法main()后。见图7

                           7

 

 

从上面可以看出方法交换的是s1s2,并没有交换sb1sb2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值