> Java > java지도 시간 > Findbugs가 Java Switch 문에서 생략된 Break 문에 플래그를 지정하는 이유는 무엇입니까?

Findbugs가 Java Switch 문에서 생략된 Break 문에 플래그를 지정하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-10-29 11:42:02
원래의
757명이 탐색했습니다.

  Why Does Findbugs Flag Omitted Break Statements in Java Switch Statements?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿