ブレークなしの Switch ステートメント: 潜在的なエラーについて理解する
Java プログラミングでは、switch ステートメントを使用すると、指定された基準に基づいてさまざまなコード ブロックを効率的に実行できます。 。ただし、break ステートメントが存在しないと、Findbugs などのツールで検出されるように、予期しない動作や潜在的なエラーが発生する可能性があります。
問題:
次の switch ステートメントを考えてみましょう。
switch (x) { case 0: // code case 1: // code case 2: // code }
break ステートメントがない場合、各 case ブロック内のコードは次の case に渡されます。これは、x が 0 の場合、ケース 0、1、および 2 のすべてのコードが実行されることを意味します。この動作は、特に後続の case のコードが x の値に依存している場合に問題となる可能性があります。
Findbugs のエラー:
Findbugs は 2 番目の case ステートメントを識別します (ケース 1) が問題となります。実行が中断せずに次のケースに移行し、論理エラーや望ましくない動作が発生する可能性があることを検出するため、エラーのフラグが立てられます。
意図された動作:
switch ステートメントの一般的なシナリオには、break ステートメントを使用して各 case ブロックで実行を終了することが含まれます。これにより、指定された基準に基づいて必要なコード ブロックのみが確実に実行されます。
たとえば、break ステートメントを含む次の switch ステートメントを考えてみましょう。
switch (foo) { case 0: doSomething(); break; case 1: doSomethingElse(); break; default: doSomeOtherThing(); break; }
この例では、foo が 0 の場合、の場合、 doSomething() のみが実行されます。 foo が 1 の場合、doSomethingElse() が実行されます。 foo が他の値の場合、doSomeOtherThing() が実行されます。
コードを介さずに複数のケースを処理する:
連続する複数のケースを必要としない場合があります。介在するコードブロック。例:
switch (foo) { case 0: case 1: doSomething(); break; case 2: doSomethingElse(); break; default: doSomeOtherThing(); break; }
このシナリオでは、foo が 0 または 1 の場合に doSomething() を実行するつもりです。このケースにはコードがないため、Findbugs などのツールは通常、これを潜在的なエラーとしてフラグを立てません。ケース 1 ブロックの前にある 0 ブロック。
以上がFindbugs が Break ステートメントのない Switch ステートメントにエラーとしてフラグを立てるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。