JAVA引用和引用所指向的值

通过一个小例子,来理解下JAVA引用。

public class Test {
	static StringBuffer a;
	static StringBuffer b;
	public static void main(String[] args) {
		a = new StringBuffer("A");
		b = new StringBuffer("B");
		operator(a,b);
		System.out.println(a+","+b);
	}
	public static void operator(StringBuffer x,StringBuffer y) {
		x.append(y);
		y = x;
		if (a == x) {
			System.out.println("a == x");
		}
		if (a.equals(x)) {
			System.out.println("a.equals(x)");
		}
		if (b == y) {
			System.out.println("b == y");
		}
		if (b.equals(y)) {
			System.out.println("a.equals(y)");
		}
		if (x == y) {
			System.out.println("x == y");
		}
		if (x.equals(y)) {
			System.out.println("x.equals(y)");
		}
	}
}	

猜猜会输出什么?






输出结果:
a == x
a.equals(x)
x == y
x.equals(y)
AB,B


是不是和想的有些出入?没关系,通过一组图来说明下程序运行期间引用的变化情况(作者的个人理解,若有错误,
欢迎指正)


1、初始状况


主程序运行后产生两个缓存,分别存储A,B。其中a引用指向A,b引用指向B。
2、调用方法operator后


产生两个新的引用(局部变量)x,y。其中x和a相等,指向缓存A;y和b相等,指向缓存B。
3、执行x.append(y)后


缓存A的内容变成了AB,缓存B没有变化,各个引用指向未发生变化。
4、执行y=x后


引用y的指向发生了变化,指向由B变成了AB,与引用a和x相等了。
5、执行完operator后的状态


现在,输出结果是不是很好理解了?




  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值