本人初学JAVA,看的尚学堂马士兵的视频教程,有个例子很奇怪。
我记得switch()   可以使用   
  byte型 (1   byte),     
  char型 (2   bytes),   
  short型 (2   bytes),   
  int型 (4   bytes)但这个例子可以判断颜色,这如何解析?难道MyColor.red代表一个数值?那case green:呢源代码如下:public class TestEnum {
public enum MyColor { red, green, blue };
public enum MyDoorOpener {me, mywife};

public static void main(String[] args) {
MyColor m = MyColor.red;
switch(m) {
case red:
System.out.println("red");
break;
case green:
System.out.println("green");
break;
default:
System.out.println("default");
}
System.out.println(m);
}
}

解决方案 »

  1.   

    在java中case标签中必须是整数或枚举类型。
    你的例子中是的枚举类型。
      

  2.   

    MyColor是一个枚举类型的变量,
    public enum MyColor { red, green, blue }; 指定了枚举允许的值
    lz看基础去吧
      

  3.   

    也就是在你说的那几个类型外还加个枚举类型,枚举是java 1.5新特性
      

  4.   

    都是胡说。
    牧举类型的值默认就是int,而且从1开始,switch只能允许整数值。
    如果:
    enum Color{
      red = "#ff0000";
      green = "00ffff";
      blue = "0000ff";
    }
    你case给我看看。
      

  5.   

    真是高人辈出,受教了!!谢谢大家。我觉得有些人要用switch判断"字符串",这枚举类型也能变通一下。
    我看了JDK文档,发现枚举常量是有序数的,从0开始,
    如上例用system.out.println(m.ordinal()) ,打印出来的值是0,不是从1开始。-------------
    ordinal() 
              返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
      

  6.   


    同意,
    public enum MyColor { red, green, blue }; 这句话实际上就是给red = 1; green = 2; blue = 3 ; 如果你一开始写 public enum MyColor { red, green = 20, blue };
    那么 red = 1 , green = 20 , blue = 21 ;
      

  7.   

    我写错了,是red = 0; green = 1; blue = 2 ; red = 0 , green = 20 , blue = 21 ;