Re: Incorrect "variable might not have been initialized"
Chris Uppal wrote:
Lee Fesperman wrote:
Sun's 1.4 javac gave me a "variable might not have been initialized"
error on the code below ... when it shouldn't have.
The compiler is correct. The JLS lays down very specific rules for when a
variable is deemed to be "definitely initialised", and your code doesn't
satisfy those conditions. See JLS Section 16.
I read JLS 16 several times. I'm obviously not a "language lawyer" because I could not
see why my code causes the error message. Would you care to explain further? Perhaps,
you could point to the relevant sub-section(s).
BTW, it works if I leave out the assignment to 'retain'.
I don't have 1.5 installed. Could someone try it on 1.5 for me?
I've just checked (JDK 1.5.0_06-b05), same thing happens.
If Test120 works on 1.5, try this one:
Also rejected.
Thanks ... also, to others who posted their results.
Lastly, this one works on 1.4 but not 1.2, so Sun seems to be making
progress in this area:
public class Test122
{
public static void main(String[] args)
{
boolean retain ;
String ref ;
if (retain = 1 > 0 && (ref = System.getProperty("user.home")) != null)
System.out.println(ref) ;
}
}
After constant-folding "1 > 0", the compiler interprets that as:
if (retain = ( (ref = System.getProperty("user.home")) != null ))
System.out.println(ref);
Yep, I shoulda realized that.
--
Lee Fesperman, FFE Software, Inc. (http://www.firstsql.com)
==============================================================
* The Ultimate DBMS is here!
* FirstSQL/J Object/Relational DBMS (http://www.firstsql.com)