简体   繁体   中英

Java ternary (immediate if) evaluation

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;

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.

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 type Boolean , then the type of the conditional expression is boolean ."

The same applies to Integer.intValue()

Best regards!

No, it couldn't. That's the same as:

Integer test = null;
if ( test != null ) { 
    test = test.intValue();
}
else {
    test = 0;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM