Java中关于StringBuffer,输出结果我知道,请问原因

yu75718619 2017-04-15 08:38:37
public class Test
{
public static void main(String[] args)
{
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");

operat(a, b);

System.out.println(a + "," + b);
}

public static void operat(StringBuffer x, StringBuffer y)
{
x.append(y);
y = x;
}
}
...全文
293 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yu75718619 2017-04-16
  • 打赏
  • 举报
回复



所以输出结果是a="AB",b="B",谢谢大家…
yu75718619 2017-04-16
  • 打赏
  • 举报
回复
引用 5 楼 MikeDDT009 的回复:
刚进入方法体是这样
引用 7 楼 MikeDDT009 的回复:
[quote=引用 6 楼 yu75718619 的回复:] [quote=引用 5 楼 MikeDDT009 的回复:] 刚进入方法体是这样
嗯,这张图能明白,接下来执行过append,不就变成了a和x指向"AB",而b和y依然指向"B"。 然后执行y=x,那a和x和y不都是指向"AB"么…?[/quote] 执行到apend的时候"A"里面就变成了"AB" ,这时候a x 还是指向"AB",b y 还是指向“B” 执行y = x的时候就是把y也指向了"AB",这个时候指向"AB"的就是a x y。b还是指向"B" 然后出了方法体后,x 和 y就都没有了(作用域),于是目前实际的指向就是a指向"AB",b指向”B“。 所以最后输出的就是"AB"和 "B"[/quote] 嗯嗯…那我说的就是对的…
MikeDDT009 2017-04-16
  • 打赏
  • 举报
回复
引用 6 楼 yu75718619 的回复:
[quote=引用 5 楼 MikeDDT009 的回复:] 刚进入方法体是这样
嗯,这张图能明白,接下来执行过append,不就变成了a和x指向"AB",而b和y依然指向"B"。 然后执行y=x,那a和x和y不都是指向"AB"么…?[/quote] 执行到apend的时候"A"里面就变成了"AB" ,这时候a x 还是指向"AB",b y 还是指向“B” 执行y = x的时候就是把y也指向了"AB",这个时候指向"AB"的就是a x y。b还是指向"B" 然后出了方法体后,x 和 y就都没有了(作用域),于是目前实际的指向就是a指向"AB",b指向”B“。 所以最后输出的就是"AB"和 "B"
yu75718619 2017-04-16
  • 打赏
  • 举报
回复
引用 5 楼 MikeDDT009 的回复:
刚进入方法体是这样
嗯,这张图能明白,接下来执行过append,不就变成了a和x指向"AB",而b和y依然指向"B"。 然后执行y=x,那a和x和y不都是指向"AB"么…?
MikeDDT009 2017-04-15
  • 打赏
  • 举报
回复
刚进入方法体是这样
MikeDDT009 2017-04-15
  • 打赏
  • 举报
回复
你需要知道一个对象可以参考多个索引,而任何一个索引都可以对这个对象进行操作
MikeDDT009 2017-04-15
  • 打赏
  • 举报
回复
引用 2 楼 yu75718619 的回复:
y指向x,x指向"A",y为什么不是指向"A"…?
2L大佬回答的相当清楚了,才开始我也没琢磨过来,然后还自己敲上代码测试了下,还debug走了遍还是不是很理解,然后仔细琢磨的确那么回事,传递的是引用,也就是实质上只是让x和y分别也参考上存放"A"的对象和“B”的对象,然后用apend对"A"这个对象进行了操作,于是a所参考的对象内容就变成了"AB",接着让y参考上了“AB”对象。于是这个时候就变成了a x y 都参考上的"AB'对象,于是"B"对象又只有b在参考了,而x y出了方法这两个参考也没了,最后输出a b就是输出这两个对象的内容完毕
yu75718619 2017-04-15
  • 打赏
  • 举报
回复
y指向x,x指向"A",y为什么不是指向"A"…?
李德胜1995 2017-04-15
  • 打赏
  • 举报
回复
StringBuffer是引用数据类型,值传递是地址的拷贝,a和x都指向堆中的同一个StringBuffer的对象, x.append(y)对内容A进行修改不为AB,y=x时,y原来指向 new StringBuffer("B"),这是y指向x,这是x,y和a同时指向new StringBuffer("A")。。。。所以输出的是AB,B

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧