PrintStream的println方法总结
PrintStream的print方法总结
String的valueOf方法总结
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
1. System.out.println(xxx)和print(xxx)方法
1). PrintStream的打印方法初步
(1). System.out.println(xxx)方法
[1]. System类属性out的类型是java.io.PrintStream类
public final static PrintStream out = nullPrintStream();
(2). PrintStream的println和print的方法----重载方法
(3). 按照参数的类型对PrintStream的重载方法println和print的分类
[1]. 参数是基本数据类型(六种)
字符型char、浮点型float和double、整形中的两种int和long(没有显示给出byte和short)
【注意】由于int类型是默认的整形类型,所以一旦println或者print方法中输入的是byte或者short类型,编译器会自动把实参是byte或者short类型的参数交给int类型的print或者println来处理。
验证:
[2]. 参数是字符数组类型
char[]
[3]. 参数是类类型
{1}. String {2}. Object
[4]. 空参数类型[print方法没有空参数]
2). println方法的基本源码
(1). 基本数据类型、字符数组和String类类型参数 ----源码
[1]. 源码总结
public void println(int/long/float/double/char/boolean/char[]/String x) {
synchronized (this) {
print(x);
newLine();
}
}
[2].
执行步骤
{1}. 首先println根据调用各自的类型调用相应参数的print方法
{2}. 然后调用PrintStream的私有方法newLine()
【注意】
这个newLine方法不是BufferedWriter的newLine,而是PrintStream的私有方法
(2). 类类型:Object类型参数 ----源码
[1]. 源码
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
[2]. 执行步骤
{1}. 首先通过String的静态valueOf方法将Object指向的对象转换成String类型的对象
{2}. 后面的步骤同其他类型的步骤。
(3). 空参数的println源码
public void println() {
newLine();
}
只加了一个换行符。
3). print方法的基本源码
(1). 基本数据类型、Object类类型参数 ----源码
[1]. 源码
public void print(int/long/float/double/char/boolean/Object x) {
write(String.valueOf(x));
}
[2]. 执行步骤
直接调用String的valueOf方法将基本数据类型 + Object类型的对象转换成String类型的对象,然后将转换好的字符串写入write方法中。
(2). 字符数组类型和String类类型参数 ----源码
源码
public void print(char[]/String X) {
write(x);
}
【 注意】String参数传进来的时候,做一下非空判断
if (x == null) {
x = "null";
}
2. String.valueOf(xxx)重载方法源码总结
由于PrintStream类的print代码底层调用的是String的静态方法valueOf,这里面就总结一下valueOf的源码。
1). String的valueOf(xxx)重载方法
(1). String.valueOf方法一览表
(2). String的valueOf(xxx)重载方法的分类
[1]. 参数是基本数据类型(六种)
boolean、char、long、int、float和double
[2]. 参数是字符数组类型(两种重载)
{1}. char[] {2}. char[], int, int
[2]. 参数是Object类类型
2). String的valueOf(xxx)重载方法源码分析
(1). 四种数值基本数据类型 ----源码
这四种数值基本数据类型是:long、int、float和double
[1]. 源码
public static String valueOf(int/long/float/double x) {
//整形:int和long对应的toString有两个参数
return Integer/Long.toString(x,10);
//或者
//浮点型:float和double对应的toString只有1个参数
return Float/Double.toString(x);
}
[2]. 执行思想
就是分别调用整形或者浮点型对应的包装类的静态toString()方法
【注意】toString是包装类自定义的静态方法,不是Object类的非静态的toString方法。
(2). boolean基本数据类型、Object类类型参数 ----源码
[1]. 执行思想
boolean和Object类型的参数都是先分别判断参数是否是某个值,分两种情况进行字符串映射并返回
[2]. 源码
{1}. boolean类型参数
public static String valueOf(boolean b) {
return b ? "true" : "false";
}
{1}1. 判定传入的b是否是 true
{1}2. 如果b是true,valueOf返回String字符串"true"
{1}3. 如果b是false,valueOf返回String字符串"false"
{2}. Object类型参数
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
{2}1. 判定传入的obj是否是null
{2}2. 如果obj是null,valueOf返回String字符串"null"
{2}3. 如果obj是非空,valueOf返回调用对象的toString方法
之所以在这里判断一下obj是否为null,原因就是如果null也调用toString方法,会直接抛出空指针异常。所以valueOf将null映射成"null"作为返回值。
【注意】只有Object对象的非空的时候,才会调用toString方法。
(3). char基本数据类型、两个关于char[]的重载参数 ----源码
[1]. 执行思想
无论是字符数组还是字符,都依靠String的重载构造方法
String(char[] data, int off, intcount)来完成从有关字符的数据向String类型的数据的转换。
【注意】字符类型的数据先包装成仅仅含有一个元素的字符数组,再使用上述的String的重载构造方法进行转换。
[2]. 源码
{1}. char[], int, int类型参数 ----源码
public static String valueOf(char data[], int offset, int count) {
return new String(data, offset, count);
}
{2}. char[]类型参数 ----源码
public static String valueOf(char data[]) {
return new String(data);
}
{3}. char类型参数 ----源码
public static String valueOf(char c) {
char data[] = {c};
return new String(0, 1, data);
}
【注意】先把char包装成char[],别的一样
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------