你在这里: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)
。
答案 0 :(得分: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阅读源代码。