关于打印对象时自动调用toString( )方法的说明

打印对象时为什么会自动调用toString( )方法?

打印其实是把对象toString()方法返回的值打印出来,String自己本身重写了toSting()方法,打印String对象,不需要重写toString()方法。
所有类都是继承自object,object类具有一个tostring()方法,你创建的每个类都会继承该方法。它返回对象的一个string表示,并且对于调试非常有帮助。然而对于默认的tostring()方法往往不能满足需求,需要覆盖这个方法。

JDK中解释如下:

public void print(Object obj)
打印一个对象。 由String.valueOf(Object)方法生成的字符串根据平台的默认字符编码进行转换为字节,这些字节的write(int)完全按照write(int)的方式编写。

public void write(int b)
将指定的字节写入此流。 如果字节是换行符,并且启用自动刷新,则将调用flush方法。
请注意,该字节写为给定; 根据平台的默认字符编码编写一个将被翻译的字符,使用print(char)或println(char) 方法。

PrintWriter类提供的flush方法,flush方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区。

  • 由于缓冲,字符串可能实际上没有出现在该文件中,直到调用flush()或close()方法被调用.
  • 一般的文件流操作都包含缓冲机制,write方法并不直接将数据写入文件,而是先写入内存中特定的缓冲区。
  • 正常情况下缓冲区满时,操作系统会自动将缓冲数据写入到文件中。
  • 至于close方法,原理是内部先调用flush方法来刷新缓冲区,再执行关闭操作,这样即使缓冲区数据未满也能保证数据的完整性。
  • 如果进程意外退出或正常退出时而未执行文件的close方法,缓冲区中的内容将会丢失。

public void println(Object x)
打印一个对象,然后终止该行。 此方法首先调用String.valueOf(Object)来获取打印对象的字符串值,然后表现为调用print(String)然后println() 。

{
public static String valueOf(Object obj)
返回 Object参数的字符串 Object形式。
如果参数是null ,那么一个字符串等于"null" ; 否则返回值obj.toString() 。

public String toString()返回对象的字符串表示形式。
{
toString(Object obj)返回对象 obj 的一个实例:
该符号字符的类的名称的字符串+“ @ ”和对象的哈希码的无符号的十六进制表示。

换句话说,这个方法返回一个等于下列值的字符串:
getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
}
}

你可能感兴趣的:(关于打印对象时自动调用toString( )方法的说明)