StringBuffer使用疑惑,谢谢!

xuancao 2003-07-01 09:08:58
public class stringBufferTest{
public static void main(String[] args)
{
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operator(a,b);
System.out.print(a+ "," + b);
System.out.println("Hello World!");
}
public static void operator(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
}
输出结果为:AB,B 小生一直很疑惑,请帮忙解释,谢谢!
...全文
32 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuancao 2004-01-02
  • 打赏
  • 举报
回复

import java.io.*;
public class fileTest{
public static void main(String[] args) throws java.io.IOException
{
RandomAccessFile file1 = new RandomAccessFile("c:\\1.txt", "r");
RandomAccessFile file2 = new RandomAccessFile("c:\\2.txt", "rw");
String strLine = "";
while ( (strLine = file1.readLine())!=null) {
int ilength = strLine.length();
int[] iResult = new int[ilength];
for (int i = 0; i < ilength; i++) {
iResult[i] = (int) strLine.charAt(i);
}
java.util.Arrays.sort(iResult);
for (int j = 0; j < ilength; j++) {
file2.writeChar((char)iResult[j]);
}
file2.writeUTF("\r\n");
}
}




}
xuancao 2003-07-03
  • 打赏
  • 举报
回复
谢谢各位,谢谢大家的帮忙。,
topsonstar 2003-07-02
  • 打赏
  • 举报
回复
a ------ A
b ------ B
调用了 operator 之后
//x是a的引用,y是b的引用
x.append(y); //实际上是操作a
y=x; //这里就是把y的引用改变了,不再指向b了。变为引用x了,也就是引用a了,
//如果现在 y.append(">_<"); 其实也是在改变a,现在a的值为AB>_<
ice119103 2003-07-02
  • 打赏
  • 举报
回复
楼上说得对,java里是不存在真正的地址传递的,所以很难实现两参数交换之类的操作
xiaohaiz 2003-07-02
  • 打赏
  • 举报
回复
BTW, 你的疑问实际上不是StringBuffer的疑问.
xiaohaiz 2003-07-02
  • 打赏
  • 举报
回复
楼主,先弄清楚pass by value和pass by reference的区别.再看看你的operator方法操作y和原来的b有什么关系?

StringBuffer a --------> [A]
StringBuffer b --------> [B]
初始化之后为以上,调用operator方法,传递的是引用,所以:
StringBuffer x = a ---------> [A]
StringBuffer y = b ---------> [B]
进入operator方法之后为以上所示.
执行x.append(y)和y=x之后呢?
StringBuffer x = a ---------> [AB]
StringBuffer y = x = a -----> [AB]
看看,这里b的内容并不会被改变.
javabandit 2003-07-01
  • 打赏
  • 举报
回复
Java中的形参是以传值引用,但是StringBuffer的append方法是在原有的X的地址上,加上了Y,所以传进来的参数改变,而Y是不会改变的
truss 2003-07-01
  • 打赏
  • 举报
回复
最一开始y-b,x-a值得是同一个对象
而在operator方法中
x=AB y=x=AB
而由于b并未参与其中
所以打一结果为AB B
可以了解一下整个程序中的各个变量的指向
yyhhtt 2003-07-01
  • 打赏
  • 举报
回复
我觉得是y是和b指向同一个对象,x和a指向同一个对象,
x.append(y);使x="AB"即a="AB"
y=x使y指向了x也就是a(这个过程中b的值没变)
所以打印a,b会是AB,B

62,614

社区成员

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

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