黑马程序员--09.IO流--08.【PrintStream_println( )】【PrintStream_print( )】【String_valueOf( )】【个人总结】

本文总结了Java中的PrintStream类的println和print方法,详细解析了不同参数类型的源码实现。同时,深入探讨了String的valueOf方法,包括其针对不同数据类型的重载版本和源码分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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方法,会直接抛出空指针异常。所以valueOfnull映射成"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学习型技术博客、期待与您交流! ------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值