Enum的switch用法

Enum

public enum Fruit
{
	APPLE, BANANA, ORANGE, WATERMELON
}

  

public class EnumTest
{
	public static void main(String[] args)
    {
		for(Fruit fruit : Fruit.values())
		{
			test(fruit);
		}
    }

	public static void test(Fruit fruit)
	{
		switch (fruit)
        {
			case APPLE:
				System.out.println("This is an apple");
				break;
			case BANANA:
				System.out.println("This is a banana");
				break;
			case ORANGE:
				System.out.println("This is an orange");
				break;
			case WATERMELON:
				System.out.println("This is a watermelon");
				break;

			default:
				break;
		}
	}
}

  这里的switch也可以用if-else用来代替, 但是其两者在效率上是有区别的

  1. 由于switch使用了Binary Tree(二叉树)算法, 而if-else顺序比较(每个条件都要计算一次), 除非if-else的第一个就是true, 大部分情况都是switch的效率要高于if-else.
  2. switch需要生成最大case常量+1跳转表(jump table, 跳转表是一个数组, 表项i是一个代码段的地址), 所以占用的代码空间要比if-else要大.
  3. 当case语句多于三个的时候(另一说是大于四个的时候), switch才会创建跳转表, 所以分支较少的情况下, if-else要优于switch.
  4. 当case后的常量无规律时, 会对case后的常量进行排序.
时间: 2024-08-29 06:08:13

Enum的switch用法的相关文章

SVN switch 用法详解 (ZZ)

SVN switch 用法详解 (ZZ)  http://www.cnblogs.com/dabaopku/archive/2011/05/21/2052820.html 确实,以前不会用switch之前,就像文中提到的那样,先把trunk merge进branch,提交branch,再把branch merge进trunk,是很安全,很少会产生什么冲突,但是有点太麻烦了. switch的危险在于,如果switch之后常常忘记哪些文件是switch过的,需要查看文件的属性或者看revision

Java enum(枚举)的用法详解(转)

用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强. enum Signal { GREEN, YELLOW, RED } pu

Java enum枚举的用法

一. 出现背景: 在JDK1.5之前,我们定义常量是这样的:public static final String RED = "RED"; 在JDK1.5中加入了枚举类型,我们可以把相关的常量分组到一个枚举类中: public enum Color { RED, GREEN, BLUE; } 使用的时候可以这样:Color c = Color.RED 二. 枚举特点: 1. 枚举enum是一个特殊的Java类,它继承自java.lang.Enum,继承了很多Enum的方法.但枚举类是一

SVN switch 用法总结

一直知道SVN有个switch命令,但是对它的介绍教程却很少,大多是生硬的svn帮助文档里的文字,从而一直不怎么会用.今天看了这篇文章,突觉豁然开朗,整理下来以备查阅. 使用SVN,自然是需要与别人合作开发才能体现出作用.两个人如果都在trunk上工作,那么每次提交时都要保证代码的正确性,否则自己提交一个bug百出的版本,对方一更新就挂了,所以提交时都要很谨慎.但我觉得应该有人会像我一样有这样的强迫症,文件做点小修改就想提交到服务器上去,唯恐自己将来哪里修改失败而万劫不复.抑或为了备份考虑或者有

Java的switch用法

下面是switch的用法: var status = msg;        switch (status)    //status是表达式        {            case 0:status = "未审核";break;  //0即是对status做判断,是不是status的值等于0,如果是,0后面的:就是做出处理,break跳出当前判断            case 1:status = "审核通过";break;  //执行循环体以外的操作 

c语言中enum类型的用法

11.10 枚举类型 在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等.如果把这些量说明为整型,字符型或其它类型显然是不妥当的.为此,C语言提供了一种称为“枚举”的类型.在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围. 应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型. 11.10.1 枚举类型的定义和枚举变量的说明 1. 枚举的定

switch用法

#include <stdio.h> #include <ctype.h> int main(int argc,char **argv) {     char ch;          printf("Enter the want you want:\n");          while((ch = getchar()) != '#')     {         if(ch == '\n')             continue;    //改成brea

Enum.GetName()的用法

有时候你在数据库中保存用户的状态,假如0是禁用,1是未禁用,我们在显示用户状态的时候就不能直接显示0或者1,需要转换--使用枚举方法. 方法:为了便于管理,专门新建一个用于处理这类问题的类 public enum EntryStatus { 禁用=0, 正常=1 } 在前台页面直接使用 <%=Enum.GetName(typeof (EntryStatus),item.Status) %>

1.C# -- Switch 用法

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 {     class Program {         static void Main(string[] args) {             const string myName = "karli