java:toString()方法

String s1 = "hello";
StringBuffer s2 = new StringBuffer(s1);
s2.append(" world");
System.out.println(s2.toString());
System.out.println(s2);
最后两句都是输出hello world,toString()方法到底有什么作用?

toString是Object类的方法,所有类都从Object类继承。如果你定义的类没有覆盖toString方法,则对象在调用toString方法时用的是Object类toString方法,返回的是“类名@hashcode".

System.out.println(obj)在参数是一个对象时,会首先调用该对象的toString方法。

而String类和StringBuffer类都覆盖了toString方法,都是返回字符串。

所以带不带toString效果是一样的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-04-03
为什么都输出hello world呢,楼主可以去看看println(Ojbect object)的方法他会自动调用被打印对象的toString方法,所以其实你的
System.out.println(s2.toString());
System.out.println(s2);
这两句是一样的,toString()方法是把对象转成String类型的,比如你不能把
s2赋值给s1

String s1="" ;
StringBuffer s2 = new StringBuffer("kkaskdfkdask");
s1=s2;是错误的
但是s1=s2.toString();是正确的
楼主这样应该可以知道两者间的区别了把
第2个回答  2009-04-03
StringBuffer 线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
比如insert()方法是在指定位置插入字符,appendix()方法是在末尾追加字符,
toString()方法返回此序列中数据的字符串表示形式。
第3个回答  2009-04-04
更正楼上一个错误,不是“许多对象都有这个方法”,而是“所有对象都有这个方法”,因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”

它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法

总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法

回答补充:
写这个方法的用途就是为了方便操作,所以在文件操作里面可用可不用

例子1:
public class A{
public String toString(){return "this is A";}
}
如果某个方法里面有如下句子:
A obj=new A();
System.out.println(obj);
会得到输出:this is A

例子2:
public class A{
public String getString(){return "this is A";}//toString改个名字试试看
}
A obj=new A();
System.out.println(obj);
会得到输出:xxxx@xxxxxxx的类名加地址形式
System.out.println(obj.getString());
会得到输出:this is A

看出区别了吗,toString的好处是在碰到“println”之类的输出方法时会自动调用,不用显式打出来
第4个回答  2009-04-03
toString方法大部分时候都是用来重写的,输出你想要的输出格式,java自带的方法就是一个打印封装,所以没有区别,如果你重写了这个方法,那么就会按照你写的toString方法输出你打印的内容