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用來代替, 但是其兩者在效率上是有區別的
- 由於switch使用了Binary Tree(二叉樹)算法, 而if-else順序比較(每個條件都要計算一次), 除非if-else的第一個就是true, 大部分情況都是switch的效率要高於if-else.
- switch需要生成最大case常量+1跳轉表(jump table, 跳轉表是一個數組, 表項i是一個代碼段的地址), 所以占用的代碼空間要比if-else要大.
- 當case語句多於三個的時候(另一說是大於四個的時候), switch才會創建跳轉表, 所以分支較少的情況下, if-else要優於switch.
- 當case后的常量無規律時, 會對case后的常量進行排序.
