switch支持String底层剖析
switch在JDK7之前只支持与整型类型兼容的类型,如char、byte、short、int以及它们的基本数据类型的封装类以及枚举类,在JDK7的时候增加了String类型,编译器是如何做到的呢?
1 2 3 4 5 6 7 8 9 10 11 12
| public void testSwitch(String gender){ switch (gender){ case "男": System.out.println("男"); break; case "女": System.out.println("女"); break; default: System.out.println("未知"); } }
|
编译之后变成了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public void testSwitch(String gender) { byte var3 = -1; switch(gender.hashCode()) { case 22899: if (gender.equals("女")) { var3 = 1; } break; case 30007: if (gender.equals("男")) { var3 = 0; } }
switch(var3) { case 0: System.out.println("男"); break; case 1: System.out.println("女"); break; default: System.out.println("未知"); }
}
|