当使用System,out.println()打印一个对象是自动调用toString方法
2015-10-11 18:10
771 查看
在Java中,所有的对象都是继承自Object,自然继承了toString方法,在当使用System,out.println()里面为一个对象的引用时,自动调用toString方法讲对象打印出来。如果重写了tostring方法则调用重写的toString 方法。
因为System.out.println()的这个方法源码中调用了String.valueOf(Objec o),
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
而String.valueOf(x)的源码就是去调用该对象的toString()方法,源码如下:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
例如一下例子(同事注意String StringBuilder 以及StringBuffer的区别。以下使用的是StringBuilder)。
import java.util.Random;
public class UsingStringBuilder {
public static Random random = new Random(47);
public String toString() {
StringBuilder result = new StringBuilder("[");
for(int i=0;i<25;i++) {
result.append(random.nextInt(100));
result.append(",");
}
result.delete(result.length()-2, result.length());
result.append("]");
return result.toString();
}
public static void main(String[] args) {
UsingStringBuilder u = new UsingStringBuilder();
System.out.println(u);
}
}
输出结果:[58,55,93,61,61,29,68,0,22,7,88,28,51,89,9,78,98,61,20,58,16,40,11,22,]
因为System.out.println()的这个方法源码中调用了String.valueOf(Objec o),
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
而String.valueOf(x)的源码就是去调用该对象的toString()方法,源码如下:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
例如一下例子(同事注意String StringBuilder 以及StringBuffer的区别。以下使用的是StringBuilder)。
import java.util.Random;
public class UsingStringBuilder {
public static Random random = new Random(47);
public String toString() {
StringBuilder result = new StringBuilder("[");
for(int i=0;i<25;i++) {
result.append(random.nextInt(100));
result.append(",");
}
result.delete(result.length()-2, result.length());
result.append("]");
return result.toString();
}
public static void main(String[] args) {
UsingStringBuilder u = new UsingStringBuilder();
System.out.println(u);
}
}
输出结果:[58,55,93,61,61,29,68,0,22,7,88,28,51,89,9,78,98,61,20,58,16,40,11,22,]
相关文章推荐
- Android每日范例——背景修改
- 汇编语言 第三版 王爽 实验6 更改大写字母
- 02.移动先行之谁主沉浮----第一个通用程序
- service启动和停止,绑定和解除绑定
- 20135308-信息安全系统设计基础第五周学习总结
- cordys BPM 流程设计 常用规范
- WCF跨时区自动转换问题
- O'Reilly
- CocoaPods集成时遇到的问题
- mac QQ 聊天记录 数据表
- java txt 文件的读取 和输出内容
- 模板的目录层次
- 中位数
- 稀疏矩阵存储格式总结+存储效率对比:COO,CSR,DIA,ELL,HYB
- Xaml于string(弦)定义常量和处理空间
- C++拷贝构造函数(深拷贝,浅拷贝)
- Android 网络编程使用httpClient批量上传文件并监听进度
- ksh 动态命令
- 股票收益
- Android 系统对话框