码迷,mamicode.com
首页 > 其他好文 > 详细

JDK7新特性学习之 --- switch的表达式

时间:2017-09-25 23:57:51      阅读:371      评论:0      收藏:0      [点我收藏+]

标签:cas   ase   span   ==   表达   string   为什么   es2017   9.png   

  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的表达式

标签:cas   ase   span   ==   表达   string   为什么   es2017   9.png   

原文地址:http://www.cnblogs.com/zincpool/p/7594415.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!