Подтвердить что ты не робот

Выражение switch не может быть float, double или boolean

Почему выражение switch допускает значения long, float, double или boolean в Java? почему только int (и те, которые автоматически продвигаются до int), разрешены?

4b9b3361

Ответ 1

Float и double будут неудобно использовать надежно, даже если бы они были возможны - не забывайте, что выполнение точных совпадений равенства по float/double обычно является плохой идеей в силу природы представления.

Для булевых значений, почему бы просто не использовать if для начала?

Я не помню, чтобы когда-нибудь захотелось включить любой из этих типов, если честно. У вас есть конкретный пример использования?

Ответ 2

Вы можете использовать enum в инструкции switch, а Java 7 добавит String AFAIK. Оператор switch выводится из C, где допускается только int, а реализация других типов сложнее.

Числа с плавающей запятой не являются хорошим показателем для коммутатора, поскольку точное сравнение часто прерывается ошибками округления. например 0.11 - 0.1 == 0.01 является ложным.

switch on boolean не очень полезен, поскольку простой оператор if будет проще

if(a) {

} else { 

}

не будет проще с

switch(a) {
  case true:

     break;
  case false:

     break;
}

Кстати: я бы использовал переключатель (длинный), если он был доступен, но его нет. Для меня это редкий вариант использования.

Ответ 3

Для float и double float и double я бы предположил, что они опустили его по тем же причинам, что почему это плохая идея сравнить их с помощью ==.

Для boolean это может быть просто потому, что в любом случае это будет соответствовать оператору if. Помните, что в case-выражениях могут быть только константы, поэтому случаи всегда будут соответствовать if (someBool) и if (!someBool).

Для long У меня нет объяснений. Мне кажется, что такая возможность, возможно, должна была быть включена при разработке языка.

Ответ 4

Обычно структура коммутационного случая используется при выполнении некоторых операций на основе переменной состояния. Там int имеет более чем достаточно вариантов. Boolean имеет только два так нормально, если обычно достаточно хорошо. Таким образом, пары и плавающие пары не так точны.

Честно говоря, я не могу представить пример использования этого материала, у вас была какая-то практическая проблема в этом вопросе?