黑马程序员技术交流社区

标题: 请教一个StringBuffer 问题 [打印本页]

作者: 莫运飞    时间: 2012-4-7 02:26
标题: 请教一个StringBuffer 问题
class Foo

{

public static void main(String[] sgf)

{   

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);  

  
}}

//输入的结果如何才能变成AB,AB
//而不是AB,B

作者: 姜志钦    时间: 2012-4-7 07:47
  1. class Foo

  2. {

  3.     public static void main(String[] sgf)

  4.     {

  5.         StringBuffer a = new StringBuffer("A");

  6.         StringBuffer b = new StringBuffer("B");

  7.        StringBuffer B= operate(a,b);
  8.            
  9.         System.out.println(a+","+B);

  10.     }

  11.     static StringBuffer operate(StringBuffer x,StringBuffer y)

  12.     {   

  13.      y=   x.append(y);    //这边x连接y变为AB,而y没有改变 所以还是B   
  14.       
  15.         return  y;

  16.     }
  17.    
  18. }
复制代码

作者: 翟友伟    时间: 2012-4-7 08:13
System.out.println(a+","+b);  
这里你自己定义的是 b
最后怎么可能不是  B呢?
除非 是 在定义个 c  = operate(a,b);  

System.out.println(a+","+c);  
作者: 郑强强    时间: 2012-4-7 08:22
StringBuffer a;和StringBuffer b;这两个变量是定义在main方法中的局部变量,只在main方法内部的代码范围内有效。
StringBuffer x, StringBuffer y这两个变量是operate方法的参数,也属于局部变量,只在operate方法内部的代码范围有效。
所以当值分别为“A”和“B”的StringBuffer对象传入operate方法时,后面简称为A对象和B对象,由于java中采用引用传递,即只是将原A、B对象的引用赋给了局部变量x、y而不是复制一份新的对象,所以x.append(y)直接修改了原A对象的值,变成了“AB”;(而y=x操作是将局部变量y作为了A对象的引用,但B对象仍旧是B对象(值已经被修改成BA),并没有变成A对象,只是局部变量的指向发生了改变)。此时operate方法运行结束,operate方法中的局部变量xy被销毁。继续回到main方法运行,main方法中的a、b局部变量仍分别指向A对象(值已经变成AB)和B对象,此时打印a、b,输出为AB,B。


作者: 黑马张平    时间: 2012-4-7 08:25
学习学习!!
作者: 邓飞飞    时间: 2012-4-7 08:39
class Foo

{

public static void main(String[] sgf)

{   

StringBuffer a = new StringBuffer("A");

StringBuffer b = new StringBuffer("B");

StringBuffer c= operate(a,b);


  

  System.out.println(a+","+c);

}

static StringBuffer operate(StringBuffer x,StringBuffer y)

{   

   y=x.append(y);  

    return y;
}}
作者: liuqingqian    时间: 2012-4-7 09:25
我想楼主想要的是这个效果:
  1. /**
  2. *
  3. */

  4. /**
  5. * @author kilo
  6. * @createdate 2012-4-7
  7. */
  8. public class TestStringBuffer {

  9.         /**
  10.          * @author kilo
  11.          * @createdate 2012-4-7
  12.          *
  13.          * @param args
  14.          */
  15.         public static void main(String[] args) {
  16.                 // TODO Auto-generated method stub
  17.                 StringBuffer a = new StringBuffer("A");

  18.                 StringBuffer b = new StringBuffer("B");

  19.                 operate(a, b);

  20.                 System.out.println(a + "," + b);
  21.         }
  22.         static void operate(StringBuffer x, StringBuffer y)

  23.         {
  24.                 String temp = x.toString();
  25.                 x.append(y);
  26.                 y.insert(0, temp);

  27.         }
  28. }
复制代码

作者: pray    时间: 2014-4-26 03:46
让斑竹看后决定加精固顶的好帖




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2