一个菜鸟问题

chechp 2004-08-16 09:07:24
请问各位高手:下面这段代码的运行结果为什么是AB B,而不是AB AB?
public class test{
public static void main(String args[]){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+" "+b);
}
static void operate(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
}
...全文
139 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
iversonxk 2004-08-16
  • 打赏
  • 举报
回复
java里对象和数组的传值都是以reference来传的
tan_jianhui 2004-08-16
  • 打赏
  • 举报
回复
operate()中y是b的副本,在operate()中把x赋于y,的意思是y和x指向同一个StringBuffer对象也就是a所指向的对象,但是对象里边的Sting已经由"A"变成了"AB"。但是,b还是指向原来的对象,该对象的String仍然还是"B".
这里涉及的问题是:java的函数是传值调用。

如果想得到AB AB,可以改成这样:
public class test{
public static void main(String args[]){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
b = a;
System.out.println(a+" "+b);
}
static void operate(StringBuffer x,StringBuffer y){
x.append(y);
}
}
xuyang821225 2004-08-16
  • 打赏
  • 举报
回复
x.append(y); 的结果是 使a="AB"
y=x; 不返回值 b="B";

62,623

社区成员

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

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