A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

toString()方法是如何执行的,在打印一个对象的时候就会执行吗?比如定义一个对象
T t=new T();
System.out.println(t);
这样就会执行吗?如果是,System.out.println(t)相当于怎样的执行了toString()方法?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

5 个回复

倒序浏览
没好好听课吧   所有的类都默认继承一个父类---->Object。当然我不知道Objcet的父类是谁。
所有的类都默认覆写Object类中的 toString()方法;
回复 使用道具 举报
对不起 没看清题目;


会执行,  打印出来的是这个对象所对应的哈希值,
回复 使用道具 举报
关于函数调用的问题,楼主应该参阅API,首先:
println
public void println(Object x)打印 Object,然后终止该行。
此方法首先调用 String.valueOf(x) 获取打印对象的字符串值,然后的行为如同先调用 print(String) 再调用 println() 一样。

参数:
x - 要打印的 Object。

以上是PrintStream里的println方法,这也是System.out.println调用的方法。因为System里封装了一个PrintStream对象out。
以上方法说明的很直白。这个方法先调用String.valueOf(x),那么String.valueOf(Object obj)又怎么实现呢?
参看String类的文档:

valueOf
public static String valueOf(Object obj)返回 Object 参数的字符串表示形式。

参数:
obj - 一个 Object。
返回:
如果参数为 null,则字符串等于 "null";否则,返回 obj.toString() 的值。

这里调用了toString()方法,因此楼主知道为什么打印的时候是怎么执行了toString方法了吧。
因此如果要打印的是自定义的对象,可以在类定义的时候覆盖Object里的toString方法。这样就可以达到目的。

希望能帮到楼主!
回复 使用道具 举报
会调用父类Object的toString()方法,也会按照父类的方法返回输出
Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.
The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

getClass().getName() + '@' + Integer.toHexString(hashCode())

Returns:
a string representation of the object.
如果你自己的类想要有自己的toString()方法,直接在你的累里面覆写父类的toString方法就可以了
回复 使用道具 举报
toString()函数的作用是用来返回对象的字符串表示形式,java中有很多的类都复写了这个成员函数的,如果自己自定义的类想要有自己的toString()方法,你可以自己复写它,比如一个自定义的类:
class person
{
private String name;
private int age;
  public String toString()
{
     return  name+age;
}
}

我感觉复写toString()成员函数方法有点像C++中的操作符重载。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马