Java switch запускает все случаи, если нет перерыва

#java #switch-statement

#java #switch-statement

Вопрос:

Я в замешательстве по поводу этого примера. если break удалено, то оба Today is Saturday и Today is Sunday будут напечатаны. Мне нужно знать, почему это происходит?

 int day = 4;
switch (day) {
  case 4:
    System.out.println("Today is Saturday");
   // break;
  case 7:
    System.out.println("Today is Sunday");
   // break;
 
}
 

P.S: для тех, кто удивлен, почему я задал такой простой вопрос:
Прошло некоторое время, я изучаю Kotlin, которому не нужно добавлять break в when выражение, поэтому меня это смутило, когда я работал над проектом Java, для которого требуется switch оператор

Комментарии:

1. Не будучи слишком ехидным, прочитайте, как работает язык?

2. docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html -> » Операторы break необходимы, потому что без них операторы в блоках switch проваливаются: все операторы после соответствующей метки обращения выполняются последовательно, независимо от выражения последующих меток обращения, пока не встретится оператор break».

3. Если вы не выходите из коммутатора, выполняется первый соответствующий случай и все приведенные ниже случаи (до первого разрыва). Вы можете использовать -> вместо: в более новых версиях Java, что гарантирует выполнение только одного обращения.

4. То же самое верно и для многих (большинства?) Других языков. Согласно вашему профилю, я предполагаю, что вы лучше всего знакомы с php : «Если вы не напишете оператор break в конце списка операторов обращения, PHP продолжит выполнение операторов следующего обращения.». Так что я немного удивлен, что это вас удивляет.

5. TLDR; Вот как работают операторы switch в Java. Как и большинство языков, которые имеют общее наследие с C, Java позволяет обращениям в операторах Switch «переходить» к следующему обращению, если оператор case не заканчивается оператором break. Это может быть полезно, хотя также может привести к ошибкам. Java 12 представила выражение Switch, которое имеет немного другой синтаксис и семантику.

Ответ №1:

Ваш вопрос, вероятно, является дубликатом чего-то другого, но причина в том, что case оператор в Java switch по умолчанию будет переходить к следующему case оператору, если break не будет явно указано. Чтобы лучше понять, почему операторы case ведут себя таким образом, пример прояснит это. Допустим, вы хотели, чтобы одна и та же логика выполнялась в понедельник, вторник и среду. Затем вы можете использовать следующее:

 switch (day) {
    case 1:
    case 2:
    case 3:
        System.out.println("Today is Monday, Tuesday, or Wednesday");
        break;

    case 4:
        System.out.println("Today is Thursday");
        break;

    case 7:
        System.out.println("Today is Sunday");
        break;
}
 

Ответ №2:

Оператор Break: оператор Break используется для завершения цикла. Когда внутри цикла встречается оператор break, цикл немедленно завершается.

Поэтому, когда мы используем оператор break внутри оператора switch, он завершает цикл в этом случае, и управление программой возобновляется при следующем операторе, следующем за циклом.

Ответ на ваш вопрос: когда оператор break не используется, управление программой проходит через каждый случай, пока либо он не достигнет конца блока switch, либо не встретится оператор break.