Я знаю, что это старый пост, но посмотрите на очень похожий случай и затем проголосуйте за меня: P
Отвечая на оригинальный вопрос: оценивается только один операнд, НО:
@Test
public void test()
{
Integer A = null;
Integer B = null;
Integer chosenInteger = A != null ? A.intValue() : B;
}
Этот тест будет выдавать NullPointerException
всегда, и в этом случае IF Statemat не эквивалентен?: Operator.
Причина здесь http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.25. Часть о боксе / распаковке запутана, но ее легко понять, посмотрев:
"Если один из второго и третьего операндов имеет тип boolean
, а тип другого имеет тип Boolean
, то тип условного выражения будет boolean
."
То же самое относится к Integer.intValue()
С наилучшими пожеланиями!