为什么输出a是AB,而b是B

xhust2000 2005-04-19 09:41:55
public class test {

public static void operate(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
public static void main(String[] args) {
StringBuffer a= new StringBuffer("A");
StringBuffer b= new StringBuffer("B");
operate(a,b);
System.out.println("a="+a);
System.out.println("b="+b);
}
}
为什么输出a是AB,而b是B
...全文
221 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuwang 2005-04-19
  • 打赏
  • 举报
回复
当参数为引用类型时,传递的是这个引用类型变量的副本(copy),因此y=x只是修改了y这个copy的值,而没有对b指向的对象进行修改。
wallex 2005-04-19
  • 打赏
  • 举报
回复
方法的参数看成是值传递,
在调用方法operate时,传入了x,y的指针,
在方法的内部会建立x,y指针的副本;
x的副本所指向的内容发生了改变,那么x指向的内容也相应发生了变化;
y的副本指针发生变化,并没有影响指针y所指向的内容,
而且在方法结束时,副本被销毁,所以指针y的内容没有改变.
小辉 2005-04-19
  • 打赏
  • 举报
回复
Yes !
Up !
jsjzzh 2005-04-19
  • 打赏
  • 举报
回复
虽然你用的是静态方法:但方法的参数传递方式不一样。
x.append方法相当于引用传递,而y=x为值传递。
当方法结束时,x,y都相等,但返回main时x值传递给a,y消失了.
chinaewolf 2005-04-19
  • 打赏
  • 举报
回复
应该是operate是void,
x,y的值因为是stringBuffer,是一个指针地址
y的值改变了,但是没有传回来,
x的值没有变,但是x的指针指向的值变了.
ocean放飞 2005-04-19
  • 打赏
  • 举报
回复
x.append(y); 指针操作
y=x; 值操作(stringBuffer是这样的方法定义)

kingdom119 2005-04-19
  • 打赏
  • 举报
回复
UP
zxiaofei_2000 2005-04-19
  • 打赏
  • 举报
回复
参数其实都是传值,基本数据类型传的是数据值,引用则是传递指向同一个对象的引用值。进入方法时,a和x都是指向同一个对象,b和y也是指向同一个对象。对x的该步操作(x.append(y);)并没有使x指向另一个对象,所以对x的操作等同于对a的操作;而对y的该步操作(y=x;)却使y指向另一个对象(x所指对象,且之前x所指对象不同于y所指对象),所以对y的操作将不等同于对b的操作。

62,614

社区成员

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

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