System.out只是的一个实例
PrintStream。您可以检查其JavaDoc。它的可变性基于
方法重载 (名称相同但参数不同的多个方法)。
该打印流将其输出发送到所谓的
标准输出
。
在您的问题中,您提到了一种称为 可变参数函数 (或
varargs
)的技术。不幸的是,这不受的支持
PrintStream#print,因此您必须将其与其他东西混淆。但是,用Java实现它们非常容易。只需检查文档即可。
而且,如果您好奇Java如何知道如何连接非字符串变量
"foo" + 1 + true + myObj,则这主要是Java编译器的责任。
当串联中不涉及任何变量时,编译器仅将字符串串联。当涉及到变量时,串联被转换成
StringBuilder#append链。结果字节码中没有连接指令。也就是说,
+在编译过程中会解析运算符(在谈论字符串连接时)。
Java中的所有类型都可以转换为字符串(
int通过
Integer类中的
boolean方法,通过
Boolean类中的方法,对象通过它们自己的
#toString…)。如果您有兴趣,可以检查StringBuilder的源代码。
更新:
我很好奇自己,并检查了(使用javap)示例所
System.out.println("foo"+ 1 + true + myObj)编译的内容。结果:System.out.println(new StringBuilder("foo1true").append(myObj).toString());


