Again despite Rusty’s quote, there are circumstances (such as a
server program with no connection back to the
user’s
terminal) in which
System.out
can become a very important debugging tool (assuming that you can
find out what file the server program has redirected standard output
into; see Section 9.7).
System.out
is a PrintStream
,
so in every introductory text you see a program containing this line,
or one like it:[24]
System.out.println("Hello World of Java");
The println
method is
polymorphic;
there are forms of it for Object
(which obviously
calls the given object’s toString( )
method), for String
, and for each of the base
types (int
, float
,
boolean
, etc.). Each takes only one argument, so
it is common to use string
concatenation:
System.out.println("The answer is " + myAnswer + " at this time.");
Remember that string concatenation is also polymorphic: you can “add” anything at all to a string, and the result is a string.
Up to here I have been using a Stream
,
System.out
. What if you want to use a
Writer
? The
PrintWriter
class has all the same methods as
PrintStream
and a constructor that takes a
Stream
, so you can just say:
PrintWriter pw = new PrintWriter(System.out); pw.println("The answer is " + myAnswer + " at this time.");
One caveat with this string concatenation is that if you are appending a bunch of things, and a number and a character come togetherat the front, they are added before concatenation due to the precedence rules. So don’t do this:
System.out.println(i + '=' + " the answer.");
Assuming that i
is an integer, then i + '='
(i
added to the equals sign) is a
valid numeric
expression, which will result in a
single value of type int
. If the variable
i
has the value 42, and the character
=
in a Unicode (or ASCII) code chart has the value
61, then this will print:
103 the answer.
that is, the wrong value, and no equals sign. Safer methods include
using parentheses, using double quotes around the equals sign, and
using a StringBuffer
(see Section 3.4) or a MessageFormat
(see
Section 14.11).
3.133.134.17