Comment about Java SE 8 JLS (was Fwd: FWD: Java SE 8 Specs Typo)

Alex Buckley alex.buckley at oracle.com
Mon Mar 4 19:37:21 UTC 2019


The comment below was received from another channel.

There seems to be a confusion between whether a statement can complete 
normally and whether a statement compiles. Also, between a `while` 
statement on the one hand, and a statement contained by a `while` 
statement on the other hand.

If a `while` statement is reachable, then it can complete normally if 
its condition is not `true`. For example, `while (false){int x=5;}` can 
complete normally. Separately, the statement involving `x` which is 
contained by the `while` statement is not reachable, and an error is due 
for that.

The claim "... the while statement does not compile when the condition 
is constant TRUE" is not implied. It is perfectly legal to loop forever 
by saying `while(true){int x = 5;}`. What is not legal is to have a 
statement after a known-infinite loop, because that statement is 
unreachable.

Alex

> Subject: Java SE 8 Specs Typo
> From: Graeson Smith
> Date: 2/28/2019 12:04 PM
> To: javasedocs_us at oracle.com
>
> At Java SE 8, The Java Language Specifications, Java SE 8 Edition, Chapter 14 Section 21
>
> Link:
> https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.21
>
> At Closed Bullet 13 After "These Rules are as follows", open bullet 1
>
> Quote:
> A while statement can complete normally iff at least one of the following is true:
> The while statement is reachable and the condition expression is not a constant expression (§15.28) with value true.
>
> Assuming that the break; is there if necessary. According to the doc, the while statement will compile iff the condition is NOT CONSTANT TRUE. By extension, that means the while statement does not compile when the condition is constant TRUE. However, this is not the case.
> while(true){//int x = 5;} will compile
> while(false){//int x = 5;} will not compile
>
> This means that what it should say it:
> "A while statement can complete normally iff at least one of the following is true:
> The while statement is reachable and the condition is not a constant expression (§15.28) with value false."
>
> This revision will correlate correctly with the code demonstrated earlier in this email as well as the code at the end of section 14.21:
> "while(false){ x = 3;}" which as stated results in a compile time error.
>
> To clarify, the code at the bottom of the section supports the correct specification of JAVA SE 8. However, the quote mentioned at the beginning of this email contradicts that code.
> Thank you for your time
> -Graeson


More information about the jls-jvms-spec-comments mailing list