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
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!
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.
No, it couldn't. That's the same as:
Integer test = null;
if ( test != null ) {
test = test.intValue();
}
else {
test = 0;
}