#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.