This print stream is sending its output to so called standard output.
In your question you mention a technique called variadic functions (or varargs). Unfortunately that is not supported by
PrintStream#print, so you must be mistaking this with something else. However it is very easy to implement these in Java. Just check the documentation.
And if you are curious how Java knows how to concatenate non-string variables
"foo" + 1 + true + myObj, it is mainly responsibility of a Java compiler.
When there is no variable involved in the concatenation, the compiler simply concatenates the string. When there is a variable involved, the concatenation is translated into
StringBuilder#append chain. There is no concatenation instruction in the resulting byte code; i.e. the
+ operator (when talking about string concatenation) is resolved during the compilation.
All types in Java can be converted to string (
int via methods in
boolean via methods in
Boolean class, objects via their own
#toString, …). You can check StringBuilder’s source code if you are interested.
UPDATE: I was curious myself and checked (using javap) what my example
System.out.println("foo" + 1 + true + myObj) compiles into. The result: