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");
но в любом случае это не должно работать без брекетов?
Он оценивается как:
String message = (("prefix" + isValid) != null) ? " midfix " : "suffix";
что эквивалентно:
String message = ("prefixtrue" != null) ? " midfix " : "suffix";
Поэтому возвращается "midfix".
Если вы хотите, чтобы "префиксный префикс" возвращался, используйте круглые скобки:
String message = "prefix" + (isValid != null ? " midfix " : "suffix");