Ответ 1
Поскольку вам нужна спецификация, вот она (из §15.25 Условный оператор?:, последнее предложение раздела):
Выраженное выражение операнда не оценивается для этой конкретной оценки условного выражения.
Я не могу найти соответствующую часть спецификации, чтобы ответить на это. В условном операторном выражении в Java, как оцениваются истинные и ложные аргументы?
Итак, можно было бы вызвать исключение NullPointerException
Integer test = null;
test != null ? test.intValue() : 0;
Поскольку вам нужна спецификация, вот она (из §15.25 Условный оператор?:, последнее предложение раздела):
Выраженное выражение операнда не оценивается для этой конкретной оценки условного выражения.
Нет, не мог. Это то же самое, что:
Integer test = null;
if ( test != null ) {
test = test.intValue();
}
else {
test = 0;
}
Я знаю, что это старый пост, но посмотрите на очень похожий случай, а затем проголосуйте за меня: 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()
С уважением!
Кстати, это не называется "оператором короткого замыкания" - это "тройной" или (наиболее правильно) "условный оператор". Булевыми операторами короткого замыкания являются || и & &.
синтаксис неправильный.
Integer test = null;
int testVal = (test != null) ? test.intValue() : 0;
Надеюсь, поможет....