关于String和StringBuffer

sindorei 2009-10-30 08:41:54

public class Test {

public static void main(String[] args) {
String x = "A";
String y = "B";
operate(x,y);
System.out.println(x + "," + y);
}

static void operate(String x, String y) {
x = x+y;
y = x;
}
}



输出结果是A,B

public class Test {

public static void main(String[] args) {
StringBuffer x = new StringBuffer("A");
StringBuffer y = new StringBuffer("B");
operate(x,y);
System.out.println(x + "," + y);
}

static void operate(StringBuffer x, StringBuffer y) {
x = x.append(y);
y = x;
}
}


输出结果是AB,B
原因求解答
...全文
124 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
木木水夕 2009-10-30
  • 打赏
  • 举报
回复
呵呵,没占到
木木水夕 2009-10-30
  • 打赏
  • 举报
回复
占个沙发,个人见解。StringBuffer 和普通的类对象一样,当作为参数传递的时候是将该对象的地址传递过去,因此调用方法后会发生改变。而string类的传递方法是不是将string类的值(也就是他的内容)传递过去了那?这一点我也比较迷惑,期待高手解决。
czb_beloved 2009-10-30
  • 打赏
  • 举报
回复
也有点晕! 不过还是想说说个人感觉

StringBuffer x = new StringBuffer("A");
StringBuffer y = new StringBuffer("B");
operate(x,y);
System.out.println(x + "," + y);
}

static void operate(StringBuffer x, StringBuffer y) {
x = x.append(y);
y = x;
}

new StringBuffer("B")它在程序中分别指向两个不同方法main和operate中的两个不同引用y
在x.append(y)后 y = x 值AB指向了operate中的y引用 而main中还是B指向的y引用
wangjn1982 2009-10-30
  • 打赏
  • 举报
回复
变量的作用域。
downice 2009-10-30
  • 打赏
  • 举报
回复
如果只有对象,没有那该死的基本变量,传参还难么?问题就出在这些个基本变量上,int,char等等,由于string也支持+等符号。。。。所以也被。。。。和谐了。。。汗。。。

总结下2点:
1:如果传入的是对象,在方法里使用对象的set等方法(改变对象内元素值的方法),将会改变传入的对象。
2:如果传入的不是对象又或者没有使用传入的对象的方法(改变对象内元素值的方法),不会改变传入的值或者对象。并且+等符号的使用不算方法。
  • 打赏
  • 举报
回复
传参挺复杂
xiandulina 2009-10-30
  • 打赏
  • 举报
回复
a指向“A”,b指向“B",调用函数后,x也指向”A"(与a指向同一块地址),y指向“B",x.append(y)后x与a的指向地址的内容变为”AB“,y=x后,y也指向”AB“,随着operate函数的推出,x,y这两个临时引用型变量消失,则a指向的内容为”AB“而y指向的内容仍然为"B"
c4a4s4d4 2009-10-30
  • 打赏
  • 举报
回复
java 中 只有值传递
Dan1980 2009-10-30
  • 打赏
  • 举报
回复
和StringBuffer没关系,和Java的参数传递方式有关。请搜索论坛相关帖子。

62,620

社区成员

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

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