当使用System,out.println()打印一个对象是自动调用toString方法
在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()打印一个对象是自动调用toString方法的更多相关文章
- 怎么不让控制台system.out.println()打印
1.System类有一个public static void setOut(PrintStream out)方法,你可以调用这个方法将out重定向到任何一个全局PrintStream对象上: 2.如果 ...
- Proxy代理对象是如何调用invoke()方法的.
直奔主题,不说废话.先看java使用Proxy创建代理对象的代码. //一个开发者接口public interface Developer { String code(); void debug(); ...
- [原]toString()方法的复写作用, 以及打印集合.
java中的每个类的根都是Object的子类. 必然有拥有了Object的所有方法. 在package java.lang.Object源码中: public String toString() { ...
- 【转】Java基础:System.out.println与System.err.println的区别
同时使用了System.out.println与System.err.println()打印输入内容,结果看到的内容和预想的不一样,顺序与预料的不同并不是因为err和out的区别导致,而是因为他们是两 ...
- java中的system.out.println()和JSP中out.println()差别
out.println()输出到client. 在out.println()中,out是response的实例.是以response为对象进行流输出的,即将内容输出到client.假设在JSP ...
- JSP中System.out.println()与out.println()区别
1.out.println()输出到客户端. 在out.println()中,out是response的实例,是以response为对象进行流输出的,即将内容输出到客户端. 如果在JSP页面中使用Sy ...
- System.out.println()相关源码
System.out.println是一个Java语句,一般情况下是将传递的参数,打印到控制台. System:是 java.lang包中的一个final类.根据javadoc,“java.lang. ...
- 灵魂拷问:你真的理解System.out.println()执行原理吗?
原创/朱季谦 灵魂拷问,这位独秀同学,你会这道题吗? 请说说,"System.out.println()"原理...... 这应该是刚开始学习Java时用到最多一段代码,迄今为止 ...
- 声明数组变量/// 计算所有元素的总和/打印所有元素总和/输出/foreach循环/数组作为函数的参数/调用printArray方法打印
实例 下面是这两种语法的代码示例: double[] myList; // 首选的方法 或 double myList[]; // 效果相同,但不是首选方法 创建数组 Java语言使用new操作符来创 ...
随机推荐
- css-文本垂直居中(转)
css-文本垂直居中(转) 在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在 ...
- VS2010编译错误 LNK 2019 unresolved external symbol错误解决办法
Link错误有很多种,主要是没有在连接中加入lib文件路径,或者lib配置正确,传参错误 一个solution里面多个project之间引用其他project函数会出现这个错误,由于包含了头文件而没处 ...
- 洛谷-A+B Problem-洛谷的第一个任务
题目描述 Description 输入两个整数a,b,输出它们的和(a,b<=10^9) 输入输出格式 Input/output 输入格式:两个整数以空格分开输出格式:一个数 输入输出样例 ...
- 【编码问题】if,for语句与中文编码
1. 首先先来说说中文的问题.众所周知,作死的python经常和中文过不去 每次,开头必须声明 # coding: utf-8 或者是 # -*- coding: utf-8 -*- 然而,被坑过的 ...
- 37.看下图实现如下接口和类,并完成Adventure中的主方法。
//接口Swim package jieKou; public interface ICanswim { void Swim(); } //接口Fly package jieKou; public i ...
- 获取当前设备的IP地址
头文件: #import <ifaddrs.h> #import <arpa/inet.h> #import <net/if.h> 宏定义: #define IOS ...
- 《JavaScript高级程序设计》读书笔记 ---基本类型和引用类型的值
变量.作用域和内存问题 基本类型和引用类型的值ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象.在 ...
- 10682 deathgod想知道的事(数论)
10682 deathgod想知道的事 该题有题解 时间限制:1000MS 内存限制:65535K提交次数:265 通过次数:14 题型: 编程题 语言: G++;GCC Description ...
- Javaweb 第4 天xml 课程
XML课程 今日大纲 ● XML概念 ● XML基本语法 ● XML约束 ● dom4j技术 ● xpath技术 ******************************************* ...
- SCU 1069 POJ 2955 Brackets
区间DP #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...