关于StringBuffer问题,立即结贴!
public class e5
{
public static void main (String [] args)
{
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
System.out.println("a = "+a);//A
System.out.println("b = "+b);//B
operate (a,b);
System.out.println("a = "+a);//AB
System.out.println("b = "+b);//B
System.out.println(a + "," + b);
}
static void operate (StringBuffer x, StringBuffer y)
{
System.out.println("x = "+x);//A
System.out.println("y = "+y);//B
x.append(y);
System.out.println("x = "+x);//AB
System.out.println("y = "+y);//B
y = x;
System.out.println("x = "+x);//AB
System.out.println("y = "+y);//AB
}
}
问:该程序中最后打印的为什么是AB,B?而不是其他?
问题点数:20、回复次数:3Top
1 楼dlxu(脱离纯粹Coding阶段)回复于 2004-12-01 23:57:22 得分 20
在传入operate参数的时候,其实是在operate方法的内存空间中复制了一个原来StringBuffer b的引用,你改变了副本引用,也就是其实是副本中原来指向b的指针指向a了,但是在main函数中b的引用并没有改变,而对于a就不一样了,在operate方法中并没有改变副本a(也就是x)指向的对象,而是改变了指向对象的值,相当于把指向的对象本身的内容变更了,所以自然原来a的值也跟着要变化,所以还是AB,BTop
2 楼wenming168(清风)回复于 2004-12-02 08:23:39 得分 0
同意 dlxu(沿着Java继续前进)
在java中只有传值,没有传址Top
3 楼wooyuping(LondonFog◎伦敦雾)回复于 2004-12-09 10:35:09 得分 0
还是不太明白,什么时候改变了副本引用,什么时候没有改变副本引用,可以说得更详细一点嘛???谢谢了~~~Top




