首页 > 代码库 > tips.Print的问题

tips.Print的问题

《编程导论(Java)》中是tips.Print;设计模式中是tool..Print。

package tips;
import java.io.PrintStream;
/**
 * 到处都是System.out.println().如果一个例程中使用它们较多,请使用本类。
 * 1.2.1类体结构,练习要求阅读本类。
 * @see java.io.PrintStream
 * @author yqj2065
 * @version 0.1
 */
public class Print{
    public static void pln(Object x){
        System.out.println(x);
    } 
    public static void pln(){
        System.out.println();
    }
    public static void p(Object x){
        System.out.print(x);
    }

    /**
     * 使用指定格式字符串和参数,打印格式化的字符串。
     */
    public static PrintStream pf(String format, Object... args){
        return System.out.printf(format,args);        
    }
    public static void pfln(String format, Object... args){
        System.out.printf(format,args). println();       
    }    
}
一直用得好好的,但是没有重载System.out.println(char[]),于是出了问题。尴尬

今天看一个贴子,上面有Java Puzzlers的第12个谜题

    public static void main(String[] args) {
        String letters = "ABC";
        char[] numbers = {'1', '2', '3'};
        pln("1)" + letters + " easy as " + numbers);
        p("2)" + letters + " easy as ");
        System.out.println(numbers); // println(char[])
        System.out.println(new char[]{'1', '2', '3'});
        pln(new char[]{'1', '2', '3'});
    }
平时没有用过println(char[]),所以输出

1)ABC easy as [C@53b931e1
2)ABC easy as 123

觉得有点神奇。

    public void println(Object x) {  
        String s = String.valueOf(x);  
        synchronized (this) {  
            print(s);  
            newLine();  
        }  
    }
这个比较清楚——我叫输出为引用的“大概模样”

 print(char[] s)  Prints an array of characters. The characters are converted into bytes according to the platform‘s default character encoding, and these bytes are written in exactly the manner of the write(int) method.

所以

        char[] cs = {‘1‘, ‘2‘, ‘3‘};
        System.out.println(cs);

打印:123

关键是,我在tips.Print中没有重载System.out.println(char[])!看不见上面的输出。

唯一的好处是:

        char[] cs = null;
        pln(cs);
        System.out.println(cs);

pln(Object)不怕null,而System.out.print(char[] s) 会抛出NullPointerException(java.io.Writer.write())。


记录一下。懒得改tips.Print了。

tips.Print的问题