Тернарный оператор с конкатенацией строк вызывает частичную потерю содержимого?

1
Boolean isValid = true;
String message = "prefix" + isValid != null ? " midfix " : "suffix";
System.out.println(message);

Как вы думаете, как результат этого? Я ожидаю, что prefix midfix. Но на самом деле результат: midfix !

Это ошибка в самой библиотеке java (1.7)? Должен ли я сообщать об ошибке? Или это работает по назначению, и я злоупотребляю им?

Он может быть "фиксированным", используя:

String message = "prefix" + (isValid != null? " midfix ": "suffix"); но в любом случае это не должно работать без брекетов?

  • 1
    ("префикс" + isValid)! = ноль
  • 0
    Это о приоритете оператора ..
Теги:

1 ответ

9
Лучший ответ

Он оценивается как:

String message = (("prefix" + isValid) != null) ? " midfix " : "suffix";

что эквивалентно:

String message = ("prefixtrue" != null) ? " midfix " : "suffix";

Поэтому возвращается "midfix".

Если вы хотите, чтобы "префиксный префикс" возвращался, используйте круглые скобки:

String message = "prefix" + (isValid != null ? " midfix " : "suffix");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню