黑马程序员技术交流社区

标题: 打印名称时toString()的用途 [打印本页]

作者: 党巾水    时间: 2012-7-3 13:52
标题: 打印名称时toString()的用途
本帖最后由 刘馨琪 于 2012-7-4 10:11 编辑

记得论坛好像有规则是不让短时间大量发新帖提问题,但是我实在上网不方便,请版主谅解,谢谢。

请问,下面2句话有区别吗?谢谢。打印名称的话,不加toString()也能解决吧?
System.out.println(obj.getClass().toString() );


System.out.println( obj.getClass());

作者: 王章亚    时间: 2012-7-3 13:57
当然有区别了
 因为它是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”之类的输出方法时会自动调用,不用显式打出来。
作者: 何旭栋    时间: 2012-7-3 15:23
本帖最后由 何旭栋 于 2012-7-3 15:24 编辑

没区别
System.out.println(obj)打印时自动调用obj的toString()方法
obj所属对象的类是Object的子类
子类并没有覆盖toString()时就调用Object类的toString(),也就是打印地址值
子类中有toString()时就调用子类的toString()
作者: Forever。    时间: 2012-7-3 15:47
两段代码一样即使不加tostring也会自动调用。结果是一模一样的!
作者: 刘建龙    时间: 2012-7-3 16:03
java中默认的打印对象名字的时候就是 obj.toString();所以System.out.println(obj.toString())与System.out.println(obj);结果相同
作者: 谭立文    时间: 2012-7-3 16:52
若A是一个类名
class A
{
}
变量 a是类A的一个实例
若类A没有重写父类(Object)的 toString()方法
当你执行 System.out.println(a);  时相当于  System.out.println(a.toString());  系统会默认调用 toString()方法 由于类A没有重写toString()此时调用的就是从父类继承的
System.out.println(a);  
System.out.println(a.toString());  这两句话其实没有本质区别,只不过前者是系统帮你默认为调用toString(),而后者是显示调用。

作者: 党巾水    时间: 2012-7-4 10:13
谢谢大家!明白了!




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