为了让编译器能自动检查某个值在枚举的集合内,并且,不同用途的枚举需要不同的类型来标记,不能混用,我们可以使用enum来定义枚举类:
enum Weekday { SUN, MON, TUE, WED, THU, FRI, SAT; } public static void main(String[] args) { Weekday day = Weekday.WED; if (day == Weekday.SAT || day == Weekday.SUN) System.out.println("Work at home!"); else System.out.println("Work at office!"); }
注意到定义枚举类是通过关键字enum实现的,我们只需依次列出枚举的常量名。和int定义的常量相比,使用enum定义枚举有如下好处:
使用enum定义的枚举类是一种引用类型。引用类型比较,要使用 equals() 方法,如果使用比较,它比较的是两个引用类型的变量是否是同一个对象。因此,引用类型比较,要始终使用 equals() 方法,但 enum 类型可以例外,因为 enum 类型的每个常量在 JVM 中只有一个唯一实例,所以可以直接用 = = == == 比较
enum定义的类型就是class,只不过它有以下几个特点:
String s = Weekday.SUN.name(); // "SUN"
int n = Weekday.MON.ordinal(); // 1
结构体也相当于把几种数据类型组合起来。结构体是值类型,赋值时会直接复制
struct example //方法一:声明结构体 { int num; }; struct stu //方法二:声明同时定义变量 stu1、数组 stu2 { int name; }stu1,stu2[20]; struct //方法三:没有类型名,只需要下面直接定义的俩变量 { char* name; } temp1,temp2;
用同一段内存存放不同类型的变量,也就是使用覆盖技术,后一个数据覆盖前面的数据,使几个不同的变量共享同一段内存的结构成为共用体。往往在数据处理中,有时需要对同一段内存空间安排不同的用途,这时用共用体类型比较方便
struct MyStruct { long num; float score; char name[20]; int age; struct MyStruct *netx; }; MyStruct.num; //使用:直接通过结构体名.成员变量访问