Явная тройная (немедленная) оценка

Я не могу найти соответствующую часть спецификации, чтобы ответить на это. В условном операторном выражении в Java, как оцениваются истинные и ложные аргументы?

Итак, можно было бы вызвать исключение NullPointerException

Integer test = null;

test != null ? test.intValue() : 0;

Ответ 1

Поскольку вам нужна спецификация, вот она (из §15.25 Условный оператор?:, последнее предложение раздела):

Выраженное выражение операнда не оценивается для этой конкретной оценки условного выражения.

Ответ 2

Нет, не мог. Это то же самое, что:

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

Ответ 3

Я знаю, что это старый пост, но посмотрите на очень похожий случай, а затем проголосуйте за меня: P

Ответ на исходный вопрос: оценивается только один операнд НО:

@Test
public void test()
{
    Integer A = null;
    Integer B = null;

    Integer chosenInteger = A != null ? A.intValue() : B;    
}

Этот тест будет всегда бросать NullPointerException, и в этом случае IF statemat не эквивалентен оператору?:.

Причина здесь http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.25. Часть о боксе/распаковке втянута, но ее можно легко понять, глядя на:

"Если один из второго и третьего операндов имеет тип boolean, а тип другого имеет тип boolean, то тип условного выражения равен boolean."

То же самое относится к Integer.intValue()

С уважением!

Ответ 4

Кстати, это не называется "оператором короткого замыкания" - это "тройной" или (наиболее правильно) "условный оператор". Булевыми операторами короткого замыкания являются || и & &.

Ответ 5

синтаксис неправильный.

Integer test = null;
int testVal = (test != null) ? test.intValue() : 0;

Надеюсь, поможет....