转载自:http://blog.csdn.net/anddyhua/article/details/42675099    为什么toString 方法会自动被调用

先执行下面一段代码:

package reusing;//: reusing/Bath.java
// Constructor initialization with composition.
import static net.mindview.util.Print.*;class Soap {private String s;Soap() {print("Soap()");s = "Constructed";}public String toString() {return s;}
}public class Bath {private String // Initializing at point of definition:s1 = "Happy",s2 = "Happy", s3, s4;private Soap castille;private int i;private float toy;public Bath() {print("Inside Bath()");s3 = "Joy";toy = 3.14f;castille = new Soap();}// Instance initialization:{i = 47;}public String toString() {if (s4 == null) // Delayed initialization:s4 = "Joy";return "s1 = " + s1 + "\n" + "s2 = " + s2 + "\n" + "s3 = " + s3 + "\n"+ "s4 = " + s4 + "\n" + "i = " + i + "\n" + "toy = " + toy+ "\n" + "castille = " + castille;}public static void main(String[] args) {Bath b = new Bath();print(b);}
}

打印对象b的时候,构造函数内的自动会调用初始化,还自动调用了toString()

为什么toString 方法会自动被调用 (百度文库)
源码 
valueOf public static String valueOf(Object obj) 返回 Object 参数的字符串表示形式。
参数: obj - 一个 Object。 返回: 如果参数为 null, 则字符串等于 "null";否则, 返回 obj.toString() 的 值 
 这个问题其实比较简单的,大家可以直接看 Java 中相关类的源代码就可以知道了。 
 现在的问题是,当用户调用 print 或 println 方法打印一个对象时,为什么会打印 出对象的 toString()方法的返回信息。
  public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 
  1.这个是 Ojbect 中的 toString()方法,toString 会打印出 return 信息。 
public void println(Object x){ 
  String s = String.valueOf(x); 
     synchronized (this) 
      { 
      print(s); newLine();
      } 
   public void print(Object obj) { 
    write(String.valueOf(obj));
  } 
   2.这两个方法是 System.out.print 和 println()方法传入一个 Object 类对象时打印 的内容,当然,传入其它类时,同样如此。 
   3.我们看到,在 2 中,当要打印一个对象时,会自动调用 String.valueOf()这个 方法,
   下面是这个方法的代码: 
   public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); } 这个方法中,当传入的对象为 null 时返回一个 null,当非 null 时,则返回这个 obj 的 toString()。 
   所以, 这就是当我们调用 print 或者 println 打印一个对象时,它会打印出这个 对象的 toString()的最终根源。

为什么toString()方法会自动被调用相关推荐

  1. 始终重写 toString 方法

    **始终重写 toString 方法** 虽然 Object 类提供了 toString 方法的实现,但它返回的字符串通常不是你的类的用户想要看到的.它由类名后跟一个「at」符号(@)和哈希码的无符号 ...

  2. 由Object.prototype.toString.call( )引发关于toString( )方法的思考

    引言 前端面试中有这么一道经典的问题,如何判断一个对象是否为数组? ES5提供了一个确定对象是否为数组的函数 Array.isArray(object); 复制代码 其中,object是必须的,表示要 ...

  3. 为什么用lazy启动eclipse的时候,插件activator的start自动被调用

    问:插件的启动方式已经设为了lazy方式了,但为什么启动eclipse的时候, 插件activator的start方法还是自动被调用了 答:1.平台关闭的时候,会自动保存一些关闭前的状态: 例如,透视 ...

  4. IDEA生成toString方法的快捷键

    人工智能,零基础入门!http://www.captainbed.net/inner 对于实体Bean类,比较多繁杂的重复代码内容, 比如说get/set方法和toString方法,对于这些idea都 ...

  5. 您不能不知的ToString()方法

    1.1.1 摘要 相信大家对ToString()方法再熟悉不过了,由于该方法是.NET程序中最常用的方法之一,我们除了可以直接调用ToString()方法之外,.NET中的某些方法也隐式调用ToStr ...

  6. 你会如何给全局对象添加toString()方法

    首先,在讨论如何给所有方法window对象添加toString方法的时候,我们先来说说window的对象继承与对象实例,以及构造函数的this指针,还有变量的提升与方法的调用方式,最终一探window ...

  7. Java调用tostring方法分析_Java对象toString()方法

    对象的字符串表示以可读格式包含有关对象状态的信息. Object类的toString()方法表示字符串中类的对象.Object类提供了toString()方法的默认实现. 它返回一个以下格式的字符串: ...

  8. java tostring方法_Java虚拟机如执行方法调用的(二)?

    虚方法调用 Java里所有非私有实例方法调用都会被编译成invokevirtual指令. 接口方法调用都会被编译成invokeinterface指令.这两种指令都属于Java虚方法的调用. 在大多数情 ...

  9. Java笔记-通过注解和插件自动生成get/set和toString方法,使代码结构清晰

    目录 演示过程 需要的依赖 演示过程 如下注解: 有了这个注解就可以删除类的get/set和toString方法 去掉了后,还是可以使用get和set和toString方法: 关于性能方面,在打包生成 ...

最新文章

  1. decimal在存储过程和C#中的应用
  2. c++入门之——const在函数名前面和函数后面的区别
  3. DEDE文章列表加上序号效果
  4. uni-app实现传值路径乱码的问题
  5. kociemba算法c语言,Python kociemba包_程序模块 - PyPI - Python中文网
  6. jquery-file-upload限制文件上传大小和文件个数
  7. android的多行文本框的值,Swift - 多行文本输入框(UITextView)
  8. cmd 命令行方式执行 matlab 脚本
  9. Eclipse、STS 常用设置、操作 与 常用快捷键
  10. 如何去除暴风影音2009的广告
  11. archlinux i3wm通知管理
  12. CBCGPToolBarImages和CImageList创建与使用
  13. Spring Boot网上图书商城
  14. java 三个点号...的含义-可变参数
  15. 企业为何都用电子招投标 现代电子招投标系统介绍
  16. vscode文件飘红色波浪线
  17. 2020 SCTF 部分WriteUp
  18. win10开机“正在准备自动修复”,且无法修复你的电脑
  19. windows8 下载
  20. 服务器是干什么用的?

热门文章

  1. 深度学习入门课程推荐
  2. contentProvider的使用总结
  3. java二个整数相减_Java-消息框显示两整数加减乘除
  4. workunit 的指的工作单元是什么_三支一扶指的是什么?主要工作内容有哪些?
  5. 科研文献|圈养和类人猿微生物组的共同多样化
  6. NC:电缆细菌减少水稻种植土壤中的甲烷排放
  7. Microbiome:掠食性粘细菌通过调节土壤微生物群落来控制黄瓜枯萎病
  8. R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵)、使用rotate参数指定进行斜交旋转提取因子、使用fa.diagram函数可视化斜交旋转因子分析、并解读可视化图形
  9. Error in variable_response could not find function “variable_response“
  10. python使用matplotlib可视化堆积的折线图、使用stackplot函数可视化堆积的折线图、不同数据在垂直方向堆叠