Java ternary (immediate if) evaluation
Solution 1
Since you wanted the spec, here it is (from §15.25 Conditional Operator ? :, the last sentence of the section):
The operand expression not chosen is not evaluated for that particular evaluation of the conditional expression.
Solution 2
I know it is old post, but look at very similar case and then vote me :P
Answering original question : only one operand is evaluated BUT:
@Test
public void test()
{
Integer A = null;
Integer B = null;
Integer chosenInteger = A != null ? A.intValue() : B;
}
This test will throw NullPointerException
always and in this case IF statemat is not equivalent to ?: operator.
The reason is here http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.25. The part about boxing/unboxing is embroiled, but it can be easy understood looking at:
"If one of the second and third operands is of type
boolean
and the type of the other is of typeBoolean
, then the type of the conditional expression isboolean
."
The same applies to Integer.intValue()
Best regards!
Solution 3
No, it couldn't. That's the same as:
Integer test = null;
if ( test != null ) {
test = test.intValue();
}
else {
test = 0;
}
abhiyenta
Big Data Engineer working in Spark, Pig and Hive on the Cloudera stack. I am focused on NLP work in spark. I also have experience in Enterprise Integration using OSGI, Apache Camel and Apache Active MQ. In my spare time, I chase my 6 kids around the house.
Updated on January 22, 2020Comments
-
abhiyenta over 4 years
I can't find the relevant portion of the spec to answer this. In a conditional operator statement in Java, are both the true and false arguments evaluated?
So could the following throw a NullPointerException
Integer test = null; test != null ? test.intValue() : 0;