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

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

println(Object obj)源码:

public void println(Object x) {
	String s = String.valueOf(x);
	synchronized (this) {
		print(s);
		newLine();
	}
}

print(Object obj)源码:

public void print(Object obj) {
	write(String.valueOf(obj));
}

valueOf(Object obj)源码:

public static String valueOf(Object obj) {
	return (obj == null) ? "null" : obj.toString();
}

Object类的toString()定义:

public String toString() {
	return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

该符号字符的类的名称的字符串+“ @ ”和对象的哈希码的无符号的十六进制表示。

打印其实是把对象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())
}
}

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Whitemeen太白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值