Knut Anders Hatlen wrote:

1. Why does int pop = 0 == 0 ? 1 : null; even compile?
Maybe the compiler figures out that it's the same as pop = 1 so it discards the null? Seems like it shouldn't compile.

Or could it be auto-boxing that makes it compilable? This equivalent
code (which is what auto-boxing would rewrite it to, I think) should
compile:

int pop = 0 == 0 : 1 : ((Number) null).intValue();

Close, very close ;-)  Here's what happens:

int i = 0 == 0 ? null : 1;

   0:   aconst_null
   1:   checkcast       #2; //class java/lang/Integer
   4:   invokevirtual   #3; //Method java/lang/Integer.intValue:()I
   7:   istore_1
   8:   return

So it is autoboxing to Integer, then calling intValue(). This sure looks like a Java bug to me, I've asked internally to see if anyone can confirm, and if so I'll raise a bug against javac.

--
Alan Burlison
--

Reply via email to