0

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

代码:

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();
        }
    }
}

输出:

    ONE
    TWO
    THREE
    FOUR
    FIVE

    TWO
    THREE
    FOUR
    FIVE

    THREE
    FOUR
    FIVE

    FOUR
    FIVE

    FIVE

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

4

2 回答 2

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;
        }
    }

在此处阅读有关 switch 语句的更多信息:

没有它们,switch 块中的语句就会落空:匹配的 case 标签之后的所有语句都按顺序执行,而不管后续 case 标签的表达式,直到遇到 break 语句

于 2013-03-19T13:48:45.897 回答
1

为什么不直接使用 Enum.name() 或 Enum.toString() 方法,如下所示:

    private void tellItLikeItIs() {
     System.out.println(number.name());
    }

或者

    private void tellItLikeItIs() {
    System.out.println(number);
    }
于 2013-03-19T13:55:02.927 回答