JAVA引用和引用所指向的值

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010217750/article/details/76346244

通过一个小例子,来理解下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后的状态


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

猜你喜欢

转载自blog.csdn.net/u010217750/article/details/76346244
今日推荐