黑马程序员技术交流社区
标题:
StringBuffer的问题
[打印本页]
作者:
程旦
时间:
2012-4-19 20:47
标题:
StringBuffer的问题
public classTest {
public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
fun(a, b);
System.out.println(a+"..."+b);
}
public static void fun(StringBuffer a,StringBuffer b){
a.append(b);
b=a;
}
}
复制代码
这题的运行结果是AB。。。B
我着实不明白 不是b=a 给b赋值了吗??
我的理想结果是 AB...AB啊
作者:
liuyang
时间:
2012-4-19 20:58
运行一下楼主就会明白了
class Test{
public static void main(String[] args ){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
Oprate(a,b);
System.out.println("方法完成之后AB"+a+","+b);
System.out.println("方法完成之后的AB指向的对象为"+a.hashCode()+","+b.hashCode());
}
static void Oprate (StringBuffer x, StringBuffer y){
x.append(y);
y=x;
System.out.println("方法完成之后XY"+x+","+y);
System.out.println("方法完成之后的XY指向的对象为"+x.hashCode()+","+y.hashCode());
}
}
作者:
黑马罗坚
时间:
2012-4-19 21:46
public class Test {
public static void main(String[] args) {
//new StringBuffer("A");假如开辟的堆内存空间为0x223F new StringBuffer("B");堆内存的首地址为ox332F
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
fun(a, b);
System.out.println(a+"..."+b);
}
//当执行到这行代码是 在栈内存里开辟2块空间一个a的句柄值为OX223F和b的句柄值为OX332F
public static void fun(StringBuffer a,StringBuffer b){
//这里 把堆内存空间里的OX223F的值进行append操作修改了该内存空间OX223里值 应为栈内存里主函数区a句柄指向的
//也是0X223 所以的是AB
a.append(b);
//这条语句并没有修改堆内存里的值 只是把栈内存fun区里的b指向的值改变了 对于栈内存主函数区b句柄指向的0x332f
//堆空间首地址没任何影响所以打印的是B
b=a;
}
}
复制代码
作者:
胡元
时间:
2012-4-19 23:44
我用老毕的话说一下,就是,a,b都是容器,比如木桶,a里装一个A,b里装一个B,
你可以把b桶塞进a桶,也就是a.append(b);这时a桶里有AB,b桶里只有B,
b=a无效,因为StringBuffer类容器是唯一的,赋值无效。
作者:
袁培育
时间:
2012-4-20 09:04
其实b=a这句还是有效的,你可以在这个语句后加一个输出语句,输出a、b的值就得到你想要的结果了。我们先把fun方法里的a、b换做x、y(这样便于说明),当你调用fun方法时是将a、b的地址传给了x、y,这样x、y就指向了相应的A、B,然后执行x.append(y),这个语句就是在x所指向的StringBuffer这个容器里加一个B,这样由于a与x所指向的是同一个容器所以a就变为AB,然后执行y=x语句,这个语句是将x所指向的地址值赋给y这样y也指向AB,但是b的指向一直没有改变,始终指向B,所以就得到你所说的结果。(为了便于说明,将你fun方法里的a、b全换成x、y了,这样不会混)其实参数传地时传递的是地址值,在所调用的方法里(如本题的fun方法)进行运算的也是形式参数所指向的地址值而已,实参要想得到运算结果就只能通过接受return返回的结果。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2