使用枚举切换案例会导致重复

Can*_*lms 0 java switch-statement

当我通过一个简单的Enum测试器迭代for-each循环和switch语句来输出枚举值时,我看到的行为对我来说似乎很奇怪.

码:

public class EnumTest {

    private Number number;

    public EnumTest(Number number) {
        this.number = number;
    }
    public enum Number {
        ONE,
        TWO,
        THREE,
        FOUR,
        FIVE;
    }
    private void tellItLikeItIs() { 
        switch (number) {   
            case ONE:
                System.out.println("ONE");
            case TWO:
                System.out.println("TWO");
            case THREE:
                System.out.println("THREE");
            case FOUR:
                System.out.println("FOUR");
            case FIVE:
                System.out.println("FIVE"); 
        }
    }
    public static void main(String[] args) {    
        for (Number n : Number.values()) {
            EnumTest et = new EnumTest(n);
            et.tellItLikeItIs();
            System.out.println();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

    ONE
    TWO
    THREE
    FOUR
    FIVE

    TWO
    THREE
    FOUR
    FIVE

    THREE
    FOUR
    FIVE

    FOUR
    FIVE

    FIVE
Run Code Online (Sandbox Code Playgroud)

为什么每个调用都会返回自身以及所有后续值?

For*_*ega 7

那是因为你忘记了break;陈述......

private void tellItLikeItIs() { 
        switch (number) {   
            case ONE:
                System.out.println("ONE");
                break;
            case TWO:
                System.out.println("TWO");
                break;
            case THREE:
                System.out.println("THREE");
                break;
            case FOUR:
                System.out.println("FOUR");
                break;
            case FIVE:
                System.out.println("FIVE"); 
                break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

在这里阅读有关switch语句的更多信息:

如果没有它们,switch块中的语句将会失败:匹配的case标签之后的所有语句将按顺序执行,而不管后续case标签的表达式如何,直到遇到break语句为止