Switch 문: 생략된 중단의 위험
Java에서 switch 문은 여러 대소문자 옵션을 처리하는 편리한 방법을 제공합니다. 그러나 break 문을 생략하면 미묘한 오류와 예상치 못한 동작이 발생할 수 있습니다. 정적 분석 도구인 Findbugs는 이러한 발생에 플래그를 지정하고 한 사례가 다음 사례로 "넘어가는" 오류를 보고합니다.
다음 코드를 고려하세요.
<code class="java">switch(x) { case 0: // code case 1: // code case 2: // code }</code>
Findbugs는 특히 다음에서 오류를 발생시킵니다. 두 번째 사례 진술. 이는 break 문이 없으면 현재 케이스에 대한 코드를 실행한 후 후속 케이스로 실행이 넘어가기 때문입니다.
이 동작을 더 잘 이해하기 위해 다음 예를 살펴보겠습니다.
<code class="java">switch (foo) { case 0: doSomething(); case 1: doSomethingElse(); default: doSomeOtherThing(); }</code>
foo가 0이면 doSomething, doSomethingElse, doSomeOtherThing 세 함수가 모두 이 순서대로 실행됩니다. 그러나 foo가 1이면 doSomethingElse 및 doSomeOtherThing만 실행됩니다. 이 동작은 의도한 논리를 반영하지 않을 수 있습니다.
반대로 각 케이스에 break 문을 추가하면 의도한 함수만 실행됩니다.
<code class="java">switch (foo) { case 0: doSomething(); break; case 1: doSomethingElse(); break; default: doSomeOtherThing(); break; }</code>
이 코드에서는 하나의 함수만 실행됩니다. foo 값에 따라 실행됩니다.
Findbugs 플래그와 같은 도구는 중단을 생략하여 잠재적인 오류를 강조하고 switch 문의 의도된 동작을 보장합니다. 그러나 어떤 경우에는 여러 사례가 동일한 결과를 갖는 연속된 값 범위를 나타내는 경우 중단을 생략할 수 있습니다.
<code class="java">switch (foo) { case 0: case 1: doSomething(); break; case 2: doSomethingElse(); break; default: doSomeOtherThing(); break; }</code>
이 코드는 foo가 0 또는 1일 때 의도적으로 doSomething을 호출합니다. 대부분의 분석 도구 케이스 사이에 중간 코드가 없기 때문에 이를 오류로 보고하지 않습니다.
위 내용은 Findbugs가 Java Switch 문에서 생략된 Break 문에 플래그를 지정하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!