为什么toString()方法会自动被调用
转载自: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()方法会自动被调用相关推荐
- 始终重写 toString 方法
**始终重写 toString 方法** 虽然 Object 类提供了 toString 方法的实现,但它返回的字符串通常不是你的类的用户想要看到的.它由类名后跟一个「at」符号(@)和哈希码的无符号 ...
- 由Object.prototype.toString.call( )引发关于toString( )方法的思考
引言 前端面试中有这么一道经典的问题,如何判断一个对象是否为数组? ES5提供了一个确定对象是否为数组的函数 Array.isArray(object); 复制代码 其中,object是必须的,表示要 ...
- 为什么用lazy启动eclipse的时候,插件activator的start自动被调用
问:插件的启动方式已经设为了lazy方式了,但为什么启动eclipse的时候, 插件activator的start方法还是自动被调用了 答:1.平台关闭的时候,会自动保存一些关闭前的状态: 例如,透视 ...
- IDEA生成toString方法的快捷键
人工智能,零基础入门!http://www.captainbed.net/inner 对于实体Bean类,比较多繁杂的重复代码内容, 比如说get/set方法和toString方法,对于这些idea都 ...
- 您不能不知的ToString()方法
1.1.1 摘要 相信大家对ToString()方法再熟悉不过了,由于该方法是.NET程序中最常用的方法之一,我们除了可以直接调用ToString()方法之外,.NET中的某些方法也隐式调用ToStr ...
- 你会如何给全局对象添加toString()方法
首先,在讨论如何给所有方法window对象添加toString方法的时候,我们先来说说window的对象继承与对象实例,以及构造函数的this指针,还有变量的提升与方法的调用方式,最终一探window ...
- Java调用tostring方法分析_Java对象toString()方法
对象的字符串表示以可读格式包含有关对象状态的信息. Object类的toString()方法表示字符串中类的对象.Object类提供了toString()方法的默认实现. 它返回一个以下格式的字符串: ...
- java tostring方法_Java虚拟机如执行方法调用的(二)?
虚方法调用 Java里所有非私有实例方法调用都会被编译成invokevirtual指令. 接口方法调用都会被编译成invokeinterface指令.这两种指令都属于Java虚方法的调用. 在大多数情 ...
- Java笔记-通过注解和插件自动生成get/set和toString方法,使代码结构清晰
目录 演示过程 需要的依赖 演示过程 如下注解: 有了这个注解就可以删除类的get/set和toString方法 去掉了后,还是可以使用get和set和toString方法: 关于性能方面,在打包生成 ...
最新文章
- decimal在存储过程和C#中的应用
- c++入门之——const在函数名前面和函数后面的区别
- DEDE文章列表加上序号效果
- uni-app实现传值路径乱码的问题
- kociemba算法c语言,Python kociemba包_程序模块 - PyPI - Python中文网
- jquery-file-upload限制文件上传大小和文件个数
- android的多行文本框的值,Swift - 多行文本输入框(UITextView)
- cmd 命令行方式执行 matlab 脚本
- Eclipse、STS 常用设置、操作 与 常用快捷键
- 如何去除暴风影音2009的广告
- archlinux i3wm通知管理
- CBCGPToolBarImages和CImageList创建与使用
- Spring Boot网上图书商城
- java 三个点号...的含义-可变参数
- 企业为何都用电子招投标 现代电子招投标系统介绍
- vscode文件飘红色波浪线
- 2020 SCTF 部分WriteUp
- win10开机“正在准备自动修复”,且无法修复你的电脑
- windows8 下载
- 服务器是干什么用的?
热门文章
- 深度学习入门课程推荐
- contentProvider的使用总结
- java二个整数相减_Java-消息框显示两整数加减乘除
- workunit 的指的工作单元是什么_三支一扶指的是什么?主要工作内容有哪些?
- 科研文献|圈养和类人猿微生物组的共同多样化
- NC:电缆细菌减少水稻种植土壤中的甲烷排放
- Microbiome:掠食性粘细菌通过调节土壤微生物群落来控制黄瓜枯萎病
- R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵)、使用rotate参数指定进行斜交旋转提取因子、使用fa.diagram函数可视化斜交旋转因子分析、并解读可视化图形
- Error in variable_response could not find function “variable_response“
- python使用matplotlib可视化堆积的折线图、使用stackplot函数可视化堆积的折线图、不同数据在垂直方向堆叠