Переключить как заявление goto или индивидуальный случай проверки? - PullRequest
0 голосов
/ 06 октября 2018

Как работает оператор switch?Это похоже на утверждение goto?или это идет для каждого случая и проверяет, какой случай является истинным?И затем выполняет истинное утверждение?

int month = 2;
int year = 2000;
int numDays = 0;

switch (month) {
  case 1: case 3: case 5:
  case 7: case 8: case 10:
  case 12:
            numDays = 31;
            break;

  case 4: case 6:
  case 9: case 11:
            numDays = 30;
            break;

  case 2:
  if (((year % 4 == 0) && !(year % 100 == 0))|| (year % 400 == 0))

            numDays = 29;
            else
            numDays = 28;
            break;
   default:
           System.out.println("Invalid month.");
           break;
        }

           System.out.println("Number of Days = " + numDays);
        }

В коде мы можем видеть, что в скобках '()' мы дали переключателю переменную month.

Я хотел бы знать, вводит ли пользователь 2за месяц, то что происходит.

Переходит ли непосредственно к случаю 2 или оценивает все предыдущие случаи, т. е. (случай 1: случай 3: случай 5: случай 7: случай 8: случай 10: случай 12: случай 12:случай 4: случай 6: случай 9: случай 11 :) и затем он находит случай 2 и выполняет его?

Что он делает?

1 Ответ

0 голосов
/ 06 октября 2018

Я думаю, что ответ зависит от этого.В этом конкретном примере будет выполнен переключение таблиц, и он перейдет к конкретному искомому случаю.

Существует 2 операции оператора switch, которые могут стать переключателем таблиц и lookupswitch

Различияэти 2 можно найти в Разница между LookupSwitch JVM и TableSwitch?

Это также можно найти в спецификации от Oracle

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-3.html#jvms-3.10

Там, где случаи переключения являются редкими, табличное представление инструкции переключения таблиц становится неэффективным с точки зрения пространства.Вместо этого может быть использована инструкция lookupswitch.

...