switch(exp),在JDK7之前,只能是byte、short、char、int或者对应的包装类,或者枚举常量(内部也是由整型或字符类型实现)。因为其实exp只是对int型支持的,其他都是因为可以自动拆卸或者自动向上转型到int,所以才可以。后String被引入了,其实本质上还是对int类型值得匹配。
原理如下,通过对case后面得String对象调用hashCode方法,得到一个int类型得hash值,然后用这个hash值来唯一标识这个case。那么当匹配时,首先调用exp的hashCode,得到exp的hash值,用这个hash值来匹配所有case,如果没有匹配成功,就说明不存在;如果匹配成功了,接着会调用字符串的equals方法进行匹配。(hash值一致,equals可不一定返回的就是true)。所以,exp不能为null,cas子句使用的字符串也不能为null,不然会出现空指针异常。
java7后关键字 switch 支不支持字符串作为条件
于 2024-01-24 21:32:01 首次发布
本文解释了JDK7之前switch语句的限制,如何通过拆卸或转换支持byte、short、char和int类型,以及在处理String时,通过hashCode和equals方法进行匹配的过程,强调了exp和case字符串不能为null以避免空指针异常。
摘要由CSDN通过智能技术生成