2017-08-13 15 views
1

私の質問は基本的にswitchステートメントと関係しています。なぜなぜこれらの2つのステートメントは同等ですか

switch (foo) { 
    case 1: case 2: 
     bar(); 
     break; 
} 

は同じです:

if (foo == 1 || foo == 2) { 
    bar(); 
} 

switch文で、ケース1の下でコードが実行さだろうと私には思える、とケース2の下のコードは無視されます。なぜそうでないのか私に説明してください。

+0

場合foobar()を実行するのと同じですここに言及していますか?関連タグを追加してください。 –

+0

スイッチの動作を調べましたか?私が知っているすべての言語で、それぞれの場合は、「中断」で区切られていない限り、別々に実行されません。 「ケース1」は「ケース2」に「入る」。 – Carcigenicate

+0

Javaを想定すると、ここで「fall through」というページを検索します。https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html – Carcigenicate

答えて

0

caseステートメントを評価する場合、コードはブロックが終了するまで(通常はbreakステートメントによって)fall throughになります。次のように最初のスニペットの意味は以下のとおりです。

  • foo2ある場合は、bar()を実行し、その後破ります。
  • foo1であれば、他の値については、前のポイント
  • で詳細な、(つまり、何もしない)空である、case 1:次のブロックを実行し、その後、case 2:次のブロックへ(フォールスルー)引き続き、何caseブロックが一致しているとして(何もしない。あなたが見ることができるよう

、これはyはどのような言語1または2である。

0

break;ステートメントは、スイッチコードブロックの切断を完全に担当します。

break;文のないswitch文は非常に奇妙な順序で実行されます。

switch (2) { 
    case 2: 
     alert("hello"); 
    case 3: 
     alert("goodbye"); 
     break; 
    case 4: 
     alert("will never show"); 
    } 

JavaScriptのswitch文:https://www.w3schools.com/js/js_switch.asp

0

が、それ以下のすべてを実行するからケースを停止するために、すべてのcase文の末尾にbreak;を追加します。さもなければ、それは落ちる。

関連する問題