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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qing31657552 中级黑马   /  2016-3-28 19:27  /  372 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

直接打印对象的引用,为什么会默认调用toString方法呢

1 个回复

倒序浏览
  1. 1、System.out.println(center.toString())这句对应的源码:
  2. public void println(String x) {
  3.     synchronized (this) {
  4.         print(x); // 打印x
  5.         newLine(); // 换行
  6. }
  7. }
  8. 这能看懂吧,直接输出了传进来的参数x(center.toString())
  9. 2、System.out.println(center)这句对应的源码:
  10. public void println(Object x) {
  11.         String s = String.valueOf(x); // x对象转换为String
  12.         synchronized (this) {
  13.             print(s);
  14.             newLine();
  15.         }
  16.     }
  17. 主要看String s = String.valueOf(x);这句,然后再看看是怎么把对象x转换为String的,
  18. String.valueOf(x)对应的源码:
  19. public static String valueOf(Object obj) {
  20.     return (obj == null) ? "null" : obj.toString();
  21.     }
  22.   这下看到了吧,把刚才那x(也就是你的center)转换为String是调用了obj.toString()得到
  23.   的。
  24.   所以"直接输出对象时,会默认调用对象toString()方法"
  25.   3、我把 toString 改成 tostring 其变输出 ClassRoom@7150bd4d:
  26.   这里就直接调用到Object.toString()方法了,看看这方法的源码:
  27.   public String toString() {
  28.     return getClass().getName() + "@" + Integer.toHexString(hashCode());
  29.     }
  30.     这下知道为啥输出ClassRoom@7150bd4d了吧。
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马