Java Reference
In-Depth Information
This example is similar to its predecessor. Because the compound statement is no
longerexecutedpriortothetest,it'snolongernecessarytoinitialize
ch
-
ch
isassigned
System.in.read()
's return value prior to the Boolean expression's evaluation.
Looping Over the Empty Statement
Java refers to a semicolon character appearing by itself as the
empty statement
. It's
sometimes convenient for a loop statement to execute the empty statement repeatedly.
The actual work performed by the loop statement takes place in the statement header.
Consider the following example:
for (String line; (line = readLine()) != null; Sys-
tem.out.println(line));
Thisexampleusesfortopresentaprogrammingidiomforcopyinglinesoftextthat
arereadfromsomesource,viathefictitious
readLine()
methodinthisexample,to
somedestination,via
System.out.println()
inthisexample.Copyingcontinues
until
readLine()
returnsnull.Notethesemicolon(emptystatement)attheendofthe
line.
Caution
Becarefulwiththeemptystatement becauseitcanintroducesubtlebugs
intoyourcode.Forexample,thefollowingloopissupposedtooutputthestring
Hello
ontenlines.Instead,onlyoneinstanceofthisstringisoutput,becauseitistheempty
statement and not
System.out.println()
that's executed ten times:
for (int i = 0; i < 10; i++); // this ; represents the
empty statement
System.out.println("Hello");
Break and Labeled Break Statements
What do
for(;;);
,
while(true);
and
do;while(true);
have in common?
Each of these loop statements presents an extreme example of an
infinite loop
(a loop that never ends). An infinite loop is something that you should avoid because
itsunendingexecutioncausesyourapplicationtohang,whichisnotdesirablefromthe
point of view of your application's users.
Caution
An infinite loop can also arise from a loop header's Boolean expression
comparingafloating-pointvalueagainstanonzerovalueviatheequalityorinequality
operator,becausemanyfloating-pointvalueshaveinexactinternalrepresentations.For
example,thefollowingcodefragmentneverendsbecause
0.1
doesnothaveanexact
internal representation: