我想问问,为什么我在stringbuffer里添加的参数,最后要用.tostring转化,比如:
stringbuffer st = new stringbuffer();
st.append("hello");
我添加的是字符串啊。那为什么最后还要用st.tostring()转化,为什么?用append("hello")添加的时候,字符串是不是被转化成对象了?到底是怎么回事,大家指点一下,先谢谢大家了 

解决方案 »

  1.   

    StringBuffer类没有重写equals方法,你可能要用到比较,所以toString,转化为String类对象好做比较
      

  2.   

    StringBuffer虽然也是添加字符串,但是和String毕竟是两个类两个类里的方法也不可能都一样,所以要用到相应的方法,就要转化成相应的对象楼上说的这种情况很正确
      

  3.   

    最重要的是性能
     
    String str="hello";
    把这句话循环一万遍,
    str=str+"world";StringBuilder sb=new StringBuilder("hello");
    sb.append("world");
    你会发现后都比前都快至少百倍以上。
      

  4.   

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    StringBuilder sb=new StringBuilder("hello");

    long t1=new Date().getTime();
    for(int i=0;i<50000;i++)
    sb.append("w");
    System.out.println("StringBuilder->time:"+(new Date().getTime()-t1));

    String str="hello";
    long t2=new Date().getTime();
    for(int i=0;i<50000;i++)
    str=str+"w";
    System.out.println("String ->time:"+(new Date().getTime()-t2));
    }结果
    StringBuilder->time:16
    String ->time:10766
      

  5.   

    那个列子确实挺好的,但是我的问题是为什么stringbuffer 输出字符串的时候还要.tostring啊?
    我知道他们之间效率有不同,但是我不知道为什么要用.tostring 转化
      

  6.   

    你看一下StringBuffer的源代码可能会理解的好一点啊
    其中toString()的定义如下:
      public synchronized String toString() {
    return new String(value, 0, count);
        }
      

  7.   

    可以不用toString()方法,只要实现功能就行,别人toString也只是为了实现功能而已
      

  8.   


    可以不用.toString()啊StringBuffer sb = new StringBuffer("hello");
    System.out.println(sb);
    //结果
    hello
      

  9.   

    StringBuffer和String是两个不同的类
    你要用String的时候,当然要toString()一下
      

  10.   

    没错 你如果不把 StringBuffer的值赋给String  那就不用 toString()了还是类型转换的问题吧
      

  11.   


    相信楼主应该知道String和Stringbuffer的区别了,但是我想问楼主 怎么知道stringbuffer 输出字符串的时候还要.toString()的?
      

  12.   

    两个问题:
    1. st.append("hello"); 虽然参数是字符串,但是此方法返回值为StringBuffer,所以要想得到String类型,最简单的方法就是用toString()方法。具体见源码,如下:
        public synchronized StringBuffer append(String str) {
    super.append(str);
            return this;
        }
    2.System.out.println(sb); 的确可以这样写,并不是应为sb是String类型,而是因为String.out.println()方法具有重载性质,具体就不写了
      

  13.   


    各位似乎偏题了,我举个例子
    ---省略了类名跟main那些代码
     StringBuffer st=new StringBuffer();
     st.append("hello");
     st.append("hellyee");
     System.out.println(st.toString());
     System.out.println(st);
    其实你可以看见结果都是
    ---------
    hellohellyee
    hellohellyeest是一个StringBuffer对象,toString 是他的一个方法,用String类型返回个对象的序列。这其实只是人的习惯用法,就算你直接用println(st)也是可以的,因为println默认会把对象转换成String的。但是如果你运行以下代码:
     StringBuffer st=new StringBuffer();
     String st1;
     st.append("hello");
     st.append("hellyee");
     st1=st;这个时候就会出现异常,因为 st1是String,st是StringBuffer两者不是同类型,不能赋值.这个时候就一定要用
    st1=st.toString() 了。
      

  14.   

    在输出bufferString的时候,输出还是字符串啊 ,如果你不想用toString的方法,那就不用写了啊,如果想转化的化,前提条件是你想用string类的方法。
      

  15.   

    胡扯, 没搞清楚楼主问的是什么.其实stringbuffer相当于一块缓冲区, 不仅可以append字符串,还可以append整数,小数,字符,好多东西都拼在一起了,你说它是啥呀? 所以要用toString方法把它变成我们可以识别的字符串. 
    其实它内部做了好多转换的工作,比如整数变成字符串等. 其实它的工作和sting1 + 2 + string2 + 2.3 + String3 + 'a' 是一样的,只不过stringbuffer的效率更高.
      

  16.   

    print()的时候默认调用对象的toString方法,
      

  17.   


    我覺得樓主要把Stringbuffer 與 String區分開來!1.Stringbuffer與String是不同的類,眾所周知:類型轉換時使用了(st.tostring())。2.你在stringbuffer添加參數時,是添加了字符序列(CharSequence),而不是字符串(String)!3.append("hello")方法,是將分割的字符序列,整合起來,但整合之後不是字符串(String),而是字符序列(CharSequence)。4.使用st.tostring(),則是將字符序列轉換成了字符串!5.最重要的是弄清楚字符序列與字符串區別,建議看看API文檔.