`
yangsirjiayou
  • 浏览: 34821 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java中switch表达式不能用字符串的问题

    博客分类:
  • java
阅读更多
java中规定switch(表达式),其中的表达式只能使用Java八种原始类型(char,byte,short,int,long,double,float),而String是一个对象.
之后查看了能不能有什么方法可以实现,发现了一位大神的解决方法,虽然方法有点麻烦,但是还是值得参考的。方法如下:
第一个关键,使用String的hasCode取得字符串的哈希码,哈希码的算法如下:

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

因而两个不同字符串,其哈希码几乎不同(可能会相同,需要深究的话自己研究吧,呵呵 ),hasCode返回一个int型值,OK,我们就用这个来做case后的常量值。
第二个关键,这个hasCode不能直接拿来用,只能事先手动取得字符串的哈希码,申明一个final型的int变量,拿这个来case。
这样一来,你的switch后面的表达式就可以用XXX.hasCode,case里面用上事先定义好的常量值了。

感谢CSDN会员:flingfish235提供的方法!
分享到:
评论

相关推荐

    js 中的switch表达式使用示例

    switch 这种表达式在很多语言中都有,比如java, C等待, 使用switch比使用if else 来得方便,来得清晰,下面为大家详细介绍下其具体的使用,感兴趣的朋友可以参考下

    Java开发技术大全(500个源代码).

    leapYearByLogical.java 用逻辑表达式判断闰年 lowToUpper.java 小写字母转换成大写字母 lozengeStar.java 输出一个由*组成的菱形 multiplyTable.java 求乘法口诀表 narrowingConversion_1.java 缩减转换引发...

    Java代码检查工具PMD

     它可以为您检查Java代码中存在的如下问题:  1、隐藏的bug,例如空的try catch,switch  2、未调用的代码,例如没有使用的局部变量、参数和私有方法  3、未优化的代码,例如String的不正确使用  4、过于复杂的...

    EL表达式 (详解)

    ${param}表示返回请求参数中单个字符串的值. ${paramValues}表示返回请求参数的一组 值.pageScope表示页面范围的变量.requestScope表示请求对象的变量. sessionScope表示会话 范围内的变量.applicationScope...

    jdk-13.0.1_windows-x64_bin.exe

    可在生产环境中使用的 switch 表达式,JDK 13 中将带来一个 beta 版本实现。switch 表达式扩展了 switch 语句,使其不仅可以作为语句(statement),还可以作为表达式(expression),并且两种写法都可以使用传统的 ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    9.2.6 在字符串中查找子字符串或字符 226 9.2.7 替换字符串中的内容 226 9.2.8 String对象——磐石刻字 227 9.3 String类的最佳拍档——StringBuffer类 227 9.3.1 StringBuffer:专业操纵字符 228 9.3.2 String...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    9.2.6 在字符串中查找子字符串或字符 226 9.2.7 替换字符串中的内容 226 9.2.8 String对象——磐石刻字 227 9.3 String类的最佳拍档——StringBuffer类 227 9.3.1 StringBuffer:专业操纵字符 228 9.3.2 String...

    计算机程序设计(Java)-教案--单元二--Java语言开发基础.docx.docx

    数据类型、运算符、字符串、数组等知识在编程过程中能熟练、准确应用; ・:・能熟练、准确地应用分支、循环、跳转三种流程执行过程; 教学重点 :・标识符命名规那么、数据类型与运算符; : 嵌套ifelse语句的用法...

    java基础知识

    二 如何使用字符串: 42 三 length 表示字符串的长度 42 四 字符串的比较 equals ; 43 五 字符串的连接:concat + append(追加) 43 六 转义符 字符串长度加 双引号 就在 后边加 " 如果要加 单引号 就在 后边...

    微软JavaScript手册

    indexOf 方法 返回在 String 对象中第一次出现子字符串的字符位置。 不相等运算符 (!=) 比较两个表达式,看是否不相等。 Infinity 属性 返回 Number.POSITIVE_INFINITY 的初始值。 input 属性 返回进行查找的...

    JAVA面试题最全集

    使用StringBuffer类与String类进行字符串连接时有何区别? 57.调用Thread类的destroy()方法有什么后果? 58.多线程,用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? 59.使用socket建立客户端...

    支持jdk1.8的java反编译工具 luyten

    Procyon-Decompiler支持JDK1.8类的反编译,在很多方面做得非常不错:字符串的Switch、枚举声明方面、注解方面、匿名类、内部类、Java8新接口规范、Java8 Lambda表达式、Java8 方法传递等。  luyten是Procyon的GUI,...

    java实现别踩白块儿源码-JavaCode:我专门介绍以下主题:Java基本数据类型,声明语句,表达式语句,导入类库,用户输入之外,检查有效

    我专门介绍以下主题:Java基本数据类型,声明语句,表达式语句,导入类库,用户输入之外,检查有效输入,捕获输入中的错误,数学函数,if语句,关系运算符,逻辑运算符,三元运算符,switch语句和循环。 类变量与...

    java范例开发大全源代码

     实例42 字符串索引越界异常(StringIndexOutBounds) 60  实例43 操作错误(UnsupportedOperationException) 60  4.2 运行时异常 61  实例44 找不到指定类时发生的异常(ClassNotFoundException) 62 ...

    疯狂JAVA讲义

    9.6.4 使用MessageFormat处理包含占位符的字符串 349 9.6.5 使用类文件代替资源文件 350 9.6.6 使用NumberFormat格式化数字 350 9.6.7 使用DateFormat格式化日期 352 9.7 本章小结 355 本章练习 355 第10章 ...

    Java范例开发大全 (源程序)

     实例42 字符串索引越界异常(StringIndexOutBounds) 60  实例43 操作错误(UnsupportedOperationException) 60  4.2 运行时异常 61  实例44 找不到指定类时发生的异常(ClassNotFoundException) 62  ...

    Java语言的科学与艺术 斯坦福大学经典教材

    8.4 使用String类中的方法 8.5 字符串处理案例研究 8.6 小结 8.7 复习题 8.8 编程练习 第9章 面向对象图形 9.1 acm.graphics模型 9.2 acm.graphics程序包的结构 9.3 使用形状类 9.4 创建复合对象 9.5 小结 9.6 复习...

    java范例开发大全

    实例42 字符串索引越界异常(StringIndexOutBounds) 60 实例43 操作错误(UnsupportedOperationException) 60 4.2 运行时异常 61 实例44 找不到指定类时发生的异常(ClassNotFoundException) 62 实例45 请求的...

Global site tag (gtag.js) - Google Analytics