JDK7新特性学习之 --- switch的表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK7新特性学习之 --- switch的表达式相关的知识,希望对你有一定的参考价值。
JDK7之前,switch中表达式只能是char、byte、short、int及其对应的包装类和枚举类型。JDK7之后java中新增加了String类型作为switch的表达式之一。
但是在使用String类型作为表达式的时候,case语句有可能会出现重复的情况,例如字符串和其对应的Unicode转义字符,字面上是两个不同的字符串,但是在编译的时候,表示的都是一样的,所以会造成编译错误。
例如:
/** * 会出现编译错误 */ public class Test{ public String generate(String gender) { String str = ""; switch(gender) { case "男": break; case "\\u7537": break; } return str; } }
==》
那么为什么会出现这种情况?
==》 因为在java中编译的时候使用的是字符串的 hashcode 作为switch语句的表达式,而case语句中的两个字符串的 hashcode 是完全一样的,所以才会报错。
==》 当然,因为 hashcode 也有可能会重复,所以底层还是使用String的 equals 方法比较两个字符串。
(参考学习自 《深入理解Java7核心技术与最佳实践》)
以上是关于JDK7新特性学习之 --- switch的表达式的主要内容,如果未能解决你的问题,请参考以下文章