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后的常量進行排序.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM