public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer buf=new StringBuffer();
buf.append("Hello ").append("Would!!");
buf.replace(6, 11, "LiXinghua");
String str=buf.delete(6, 15).toString();
System.out.print("删除之后的内容  "+str);
}}
String str=buf.delete(6, 15).toString();
为什么要加.toString();

解决方案 »

  1.   

    首先你这样理解,先看buf.delete(6,15)这个操作后是一个StringBuffer类型,在来一个
    “.toString()”方法后就将StringBuffer类型转化为了String类型了。
    为什么要转化,是因为你的变量str你规定的类型是String类型的。
      

  2.   

    将stringbuffer转为string啊,应为你声明str为string了,输出结果因该为HelloW吧
      

  3.   

    buf为BufferString类型,str为String类型,System.out.print()打印的是String型
      

  4.   

    一般来说打印语句是可以打印任何对象的,如果不是String类型的,他会自己调用toString()方法
     String str=buf.delete(6, 15).toString();
    但是你这句话,等号左边是String 类型,你可以通过查帮助文档发现,buf.delete(6, 15)后,依然是Stringbuffer类型,不同类型的对象之间是不能划等号的,而toString()方法的作用就是将任何其他类型的对象转换成String类型的对象(很多对象类型都会打印出哈希码)
      

  5.   

    楼上几位,真是无语StringBuffer buf=new StringBuffer();
    这个buf是一个 StringBuffer 类型的变量String str=buf.delete(6, 15).toString();
    这里的 str 是一个 String 类型的变量这一点楼上几位菜鸟这里倒是没有说错
    然而, buf.delete(6, 15).toString() 却不是进行类型转换,而是通过调用方法得到一个新的对象。首先通过调用 buf.delete(6, 15),它会返回 StringBuffer 本身,也就是一个 StringBuffer 对象
    然后再调用返回的这个 StringBuffer 对象的 toString() 方法,它会返回一个 String 对象,最后赋值给 str 变量。这些操作中,没有进行任何类型转换的操作。
    并且,StringBuffer 是从 Object 继承,它是不允许被转换成 String 类型的
      

  6.   


    同意这个,是通过StringBuffer 的toString()方法返回String对象,而不是类型转换