0

你在这里:http: //developer.android.com/reference/java/io/PrintStream.html#print%28float%29

只有一个功能可以满足所有目的:

public void print (Object o) {
    if (o == null) {
        // print "null"
    } else {
        // print o.toString();
    }
}

更多的阐述。例如,internal_print(String str)是一个写入打印流的函数。那么唯一需要的一个功能是:

public void print (Object o) {
    if (o == null) {
        internal_print( "null" );
    } else {
        internal_print( o.toString() );
    }
}

对于其他float, int, char, long, 等重载,我可以想象它们就像:

public void print (float o) {
    if (o == null) {
        internal_print( "null" );
    } else {
        internal_print( o.toString() );
    }
}

public void print (int o) {
    if (o == null) {
        internal_print( "null" );
    } else {
        internal_print( o.toString() );
    }
}

public void print (char o) {
    if (o == null) {
        internal_print( "null" );
    } else {
        internal_print( o.toString() );
    }
}

public void print (long o) {
    if (o == null) {
        internal_print( "null" );
    } else {
        internal_print( o.toString() );
    }
}

...

甚至只是调用杀手功能print (Object o)

你能解释一下吗?非常感谢!!

4

1 回答 1

5

历史原因:PrintStream该类自 Java 1.0 以来就存在,早在添加自动装箱之前(在 1.5 中)。

自动装箱使您能够将基本类型传递给print(Object o). 如果没有它,PrintStream就必须分别为每个原始类型实现重载。

顺便说一句,print(..)原始类型的实现更像:

public void print (int o) {
    print(String.valueOf(o));
}

...以及String.valueOf(..)基本上委托给包装类中的方法的实现,例如Integer.toString(int)Long.toString(long)您可以在docjar阅读源代码。

于 2013-04-02T22:19:57.527 回答