技术关键:
1、Switch多分支语句的使用,该语句只支持对常量的判断;
2、对字符串的哈希码进行判断,也就是把String类的hashCode()方法返回值作为Switch语法的表达式,case关键字之后跟随的是各种字符串常量的哈希码整数值。
知识点:
哈希码
在Java中,哈希码代表对象的特征。可以根据的自己的需求,采用不同的算法产生的一个Int型数字。
几个常用的哈希码的算法:
1、Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。
2、String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串所在的堆空间相同,返回的哈希码也相同。
3、Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值。
实现过程:
1 package test; 2 import java.util.Scanner; 3 public class Example { 4 public static void main(String[] args) { 5 Scanner scan = new Scanner(System.in); 6 System.out.println("请输入新员工的姓名:"); 7 String name = scan.nextLine(); // 接收员工名称 8 System.out.println("请输入新员工应聘的编程语言:"); 9 String language = scan.nextLine(); // 接收员工应聘的编程语言 10 11 // 根据编程语言确定员工分配的部门 12 switch (language.hashCode()) { 13 case 3254818: // java的哈希码 14 case 2301506: // Java的哈希码 15 case 2269730: // JAVA的哈希码 16 System.out.println("员工"+name+"被分配到Java程序开发部门。"); 17 break; 18 case 3104: // c#的哈希码 19 case 2112: // C#的哈希码 20 System.out.println("员工"+name+"被分配到C#项目维护组。"); 21 break; 22 case -709190099: // asp.net的哈希码 23 case 955463181: // Asp.net的哈希码 24 case 9745901: // ASP.NET的哈希码 25 System.out.println("员工"+name+"被分配到Asp.net程序测试部门。"); 26 break; 27 default: 28 System.out.println("本公司不需要" + language + "语言的程序开发人员。"); 29 } 30 } 31 }
依照书中所给代码敲入后,一开始我不能理解switch语句中case的值是哪里来的,百度后才明白,原来是先将各种语言罗列出不同的写法,比如java有JAVA、java、Java这三种写法,通过hashcode方法提前获取哈希码的值再注释掉,而书中并没有给出这一过程。注释掉的代码如下:
System.out.println("java".hashCode()); System.out.println("Java".hashCode()); System.out.println("JAVA".hashCode()); System.out.println("C#".hashCode()); System.out.println("c#".hashCode()); System.out.println("asp.net".hashCode()); System.out.println("Asp.net".hashCode()); System.out.println("ASP.net".hashCode());
通过运行,我们可以获取各种语言不同写法所对应的哈希码,并将其放到case中进行后续判断。
该实例中的扩展练习是为学生分配兴趣小组,我们可以依据前面为员工分配部门为例,先求出不同兴趣小组的哈希码,比如足球、田径、文学等等,然后放到Switch语句中进行匹配判断即可。