虽然我不知道我的想法对不对,但是“能够将任何类型的数据转换成字符串输出”也太绝对了,我自定义一个类型不实现toString()
那它也不能打印出我想要的结果啊,无非是调用了String.valueOf()
怎么能叫它转换的
我觉得我的表述没有问题
你不重写toString
,那它不输出你想要的结果,不代表它不会给你转换成字符串;你调用了println
,它去调用valueOf方法,在程序员使用System.out.println()
语句的时候,程序员的主观感觉是println()
方法给你转换的,至于方法的实现过程调用了谁,在调用者看来没那么重要
按照你的想法,转换字符串是valueOf()
转换的,那valueOf还调用了toString()
呢,那也应该是toString转换的才对。
而toString方法在Object
里就有,null会 被valueOf()
转化为字符串"null"
,基本数据类型有专门的valueOf()
方法来转换,所以所有类型的数据都可以被println()
转换成字符串输出
事实上用println
的人完全不会在意是否是转换为字符串,只在意它是否能输出,以及输出的格式,所以转换字符串的功能不是它自带的你也不能通过其他方式获取到这个字符串,他屏蔽了这个细节,然而你要将这个细节深挖出来,那宁愿讲出它是如何实现功能的,String.valueOf()
在客观上就已经实现了功能,我可以获取转换后的值,那我可以认为是它实现的,我可以不需要考虑里面是什么,问题就在于prinln
并没有这样的功能,所以我不认为是他提供了转换字符串的功能
我想如果非要将功能概括为“能够将任何类型的数据转换成字符串输出”,那不如分类概括
我应该了解了,你说println
方法不能使我获得这个转换后的字符串,而可以通过valueOf()
获取到,所以是valueOf
转换的
println
方法的主要功能是输出,我对这个方法功能的概括中,最终的动作是输出;所以应该是这样:输出前,这个方法内的valueOf
方法会将其他类型的数据转换成字符串,对不对
其实你原来说的也没有很错,只是我关注点在于如何自定义输出,所以感受上我并不认为这是println()
的作用,但无非是一种说法,我只希望这些表述能更加严谨,而不是用一句非常肯定而又简单的话语下定义,具体问题具体分析显然来得更好一些
不过这种“执着”更像是一种抬杠,希望你不要在意,还有一些原因是,你的笔记是公开的面向所有人,严谨性变得更重要了