黑马程序员技术交流社区
标题: 打印名称时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 |