Because the return value of your ternary operation is a primitive int, it will try to parse to an int before autoboxing this again to an Integer object. Parsing null will not work.

In a and b both values are primitive ints. C is no problem as there is no autoboxing involved. In d, the value is always primitive int 1, which will get autoboxed. In e the primitive will get autoboxed to an Integer object, so only f gives a problem.

So the "?" operator checks the return type of BOTH possible values, and if EITHER is an "int", it will pass any Integer to an int before autoboxing again to an Integer ? The following seems to confirm this (g works, h fails)

Integer g=false?new Integer(1):getTest();
Integer h=true?getTest():1;

That doesn't seem a very logical way to apply autoboxing to the "?" operator - wouldn't it be better to apply autoboxing to the return value only if it needs it ?

Unnecessarily doing an Integer -> int -> Integer conversion will take extra time, and causes the failure of what looks like a reasonable statement.

I think it might be compiled like that because I've used true or false in my examples - in reality these would be determined at run time, so the autoboxing and conditional operator mentioned in Bart CR's links are the reason for this behaviour.

Still seems wrong to me (what if I have subclassed Integer to MyInteger for example - by going through this MyInteger -> int -> MyInteger process it would lose any extra information that method had put onto MyInteger)

At least I know now - thankyou for your help. I've changed the original problematic line to:

Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects.
Interface Comparable is used to allow objects of a cl…

Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it.
Define Error Message:
Line Numbers:
Type of Error:
Break Down…