java解释器自动调用tostring方法

WaterSource 内定义的一个方法是比较特别的:toString()。大家不久就会知道,每种非基本类型的对象都
有一个toString()方法。若编译器本来希望一个String,但却获得某个这样的对象,就会调用这个方法。所
以在下面这个表达式中:
System.out.println("source = " + source) ;
解释器会发现我们试图向一个WaterSource 添加一个String 对象("source =")。这对它来说是不可接受
的,因为我们只能将一个字串“添加”到另一个字串,所以它会说:“我要调用toString(),把source 转
换成字串!”经这样处理后,它就能编译两个字串,并将结果字串传递给一个System.out.println()。每次
随同自己创建的一个类允许这种行为的时候,都只需要写一个toString()方法。
 

我们知道,System.out.println(对象),在当前对象中,没有覆盖toString方法的情况下,这语句可以打印出该对象的类名,哈希码等等。其中out对象是PrintStream类型,PrintStream类中的print、println等类似方法并没有发现调用了对象的toString方法。到目前为止,我查看源代码,没有看到这样的显式调用,那么问题是,难道编译器自动地去调用toString方法吗?

当一个Object实例被转化成String时,Java就会自动调用toString()方法返回一个String。 System.out.println标准输出,只能输出String,所以,所有需要输出的Object都会被转化成String。如果你没有覆盖toString,那么,Java会自动调用最上层父类Object的toString()方法。 其内容如下: return getClass().getName() + "@" + Integer.toHexString(hashCode()); 所以,没有定义toString,并用System.out.println输出实例的时候,会看到类名和哈希码。当你覆盖了toString()后,会调用你自己写的toString()方法。

编程技巧:System.out.println(Object str);能不写toString()方法就不写,因为如果对象是null,自作聪明去显示调toString()方法就会报空指针异常,System.out.println(Object str)这个方法遇到null对象,会打印null,不会再去调toString()方法。这是System.out.println(Object str)的逻辑控制的。很有人性化。

总结:System.out.println(Object str)当碰到参数不是字符串的时候,会自动调用判断对象是否为null,是null就打印“null”字符串,不是null,就调用toString()方法,返回字符串。

一个非字符串对象遇到+字符串对象,解释器会判断,该非字符串对象是否为null,不为null非字符串对象会自动调用tostring方法,是null的话,会返回null字符串,然后实现两个字符串拼接。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值