Странный тройной нулевой указатель [дубликат]

13
задан Markus A. 6 October 2012 в 22:38
поделиться

3 ответа

Согласно JLS : -

Тип условного выражения определяется следующим образом:

  • Если второй и третьи операнды имеют один и тот же тип (который может быть нулевым типом), то это тип условного выражения.
  • Если один из второго и третьего операндов имеет примитивный тип T, а тип другой - результат применения преобразования бокса (п. 5.1.7) в Т, тогда тип условного выражения равен T.
14
ответ дан Rohit Jain 27 August 2018 в 21:10
поделиться

Так оно и должно работать. Тернарный оператор не означает эквивалент регулярного оператора if. Телами if и else являются утверждения , а части, следующие за ? и :, являются выражениями , которые должны оцениваться одним и тем же типом .

Иными словами: a = b ? c : d не должен быть эквивалентен if (b) a = c; else a = d;. Вместо этого b ? c : d является выражением само по себе, а присвоение его результата a не повлияет на результат.

2
ответ дан Aasmund Eldhuset 27 August 2018 в 21:10
поделиться

Проблема заключается в том, что:

Integer number = (condition) ? getNumber() : 0;

Заставляет распаковать и переустанавливать результат getNumber (). Это связано с тем, что ложная часть тройки (0) является целым числом, поэтому она пытается преобразовать результат getNumber () в int. В то время как следующее не делает:

Integer number = (condition) ? getNumber() : (Integer) 0;

Это не ошибка, просто то, как Java решила что-то делать.

11
ответ дан CrazyCasta 27 August 2018 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: