在JDK7以前,switch是不能够用String作为参数进行条件判断的,只能支持 byte、short、char、int或者其对应的封装类以及 enum 类型。但是在JDK之后,String作为参数是能够作为switch的参数,但是前提是你的jdk环境必须是JDK7以上的版本。
这里我们看一下代码(这里用的jdk环境为jdk1.7.0_79):

public class SwitchDemo {public static void main(String[] args) {String string = "Hello";switch (string) {case "Hello":System.out.println("Application is running on Hello mode");break;case "World":System.out.println("Application is running on World mode");break;case "Java":System.out.println("Application is running on Java mode");break;default:System.out.println("Application is running on default mode");break;}}
}

最后结果输出无疑为:Application is running on Hello mode,所以咋jdk1.7以上是能够以String作为Switch为参数的。但是值得思考的是,java中是真的支持了这一特性还是另有玄机呢,所以我们一起来看看生成的.class文件,我们利用反编译器来一探究竟:

import java.io.PrintStream;
public class SwitchDemo
{public SwitchDemo(){}public static void main(String args[]){
label0:{String string = "Hello";String s;switch ((s = string).hashCode()){default:break;case 2301506: if (!s.equals("Java"))break;System.out.println("Application is running on Java mode");break label0;case 69609650: if (s.equals("Hello")){System.out.println("Application is running on Hello mode");break label0;}break;case 83766130: if (!s.equals("World"))break;System.out.println("Application is running on World mode");break label0;}System.out.println("Application is running on default mode");}}
}

从上面反编译的代码中我们可以知道,jdk1.7并没有新的指令来处理switch string,而是通过调用switch中string.hashCode,将string转换为int从而进行判断。
最后可以得到结论:jdk1.7以后可以将String作为switch参数进行传递,其原理就是将字符串转换成hashCode值,然后在进行equals比较,也就是编译器在编译期间给代码做了转换。

Switch能否用string做参数?相关推荐

  1. 2. Switch能否用String做参数?

    Switch语句的参数类型 JDK1.6 的版本中,switch后面的括号里面只能放int类型的值, 注意是只能放int类型,但是放byte,short,char类型的也可以.是因为byte,shor ...

  2. Switch可以用string做参数吗

    在jdk1.7 之前,switch 只能支持 byte.short.char.int 这几个基本数据类型和其对应的封装类型.switch后面的括号里面只能放int类型的值,但由于byte,short, ...

  3. Switch用String做参数

    Switch能否用String做参数? 参数可以是整数表达式,JDK1.5开始支持Enum类,JDK1.7开始支持String. 当字符串不会频繁改变时可以用枚举来代替String:用Enum.par ...

  4. java 输入 方程,用java 编写一程序,求解一元二次方程:aX2+bX+c=0.参数a、b及c从命令行做参数输入 java...

    题目: 用java 编写一程序,求解一元二次方程:aX2+bX+c=0.参数a.b及c从命令行做参数输入 java 答案参考: 以下程序在jdk5.0测试通过 import java.util.Sca ...

  5. [基础题]2.(*)利用接口做参数,写个计算器,能完成加减乘除运算。

    /*2.(*)利用接口做参数,写个计算器,能完成加减乘除运算. (1)定义一个接口Compute含有一个方法int computer(int n, int m). (2)设计四个类分别实现此接口,完成 ...

  6. 关于C#的Main(String[] args)参数输入问题

    指定相关的测试代码 首先,写一个用于测试的关于Main(String[] args)参数输入有关的代码类,如下: using System; public class Hello {     publ ...

  7. 利用接口做参数,写个计算器,能完成加减乘除运算。 (1)定义一个接口Compute含有一个方法int computer(int n, int m)。 (2)设计四个类分

    代码 /*第二题:利用接口做参数,写个计算器,能完成加减乘除运算.(1)定义一个接口Compute含有一个方法int computer(int n, int m).(2)设计四个类分别实现此接口,完成 ...

  8. Java 接口做参数,接口回调

    JAVA接口做参数,接口回调 接口做参数:将实现某接口的类的对象的引用用作参数传递给该接口参数.该接口通过回调来实现该接口方法. 接口回调:实现某接口的类的对象的引用,赋值给该接口声明的接口变量. 难 ...

  9. python中非怎么表示_【问题解答】Python中非十进制数做参数会自动转换成十进制么?...

    问题:比如chr()函数,文档中说参数i应该是integer,但是输入0o47055.0x4e2d.0b100111000101101都可以得到字符"中". 还有就是网上写的2进制 ...

最新文章

  1. 基于开源TiRG的文本检测与提取实现
  2. linux rpm 包制作详解
  3. 机器学习(Machine Learning)- 吴恩达(Andrew Ng)-学习笔记
  4. a*算法流程图_光伏逆变器MPPT基本算法介绍李星硕
  5. 设计模式之十一:抽象工厂模式(Abstract Factory)
  6. Ubuntu软件安装
  7. 怎么查看过程xact_abort 是否开启_空调噪音大怎么办?
  8. java过滤器执行按什么排序_servlet过滤器及监听器
  9. 3. IPSEC-XXX与SSL-XXX的使用场景与在等保中涉及的条款
  10. 财务分析真不难!无需代码,一个模板直接复用,碾压上千Excel表
  11. 半导体器件物理【6】固体量子——各种电子有效质量 + 状态密度函数
  12. Java使用iTextPDF生成PDF文件
  13. C# int uint long ulong byte sbyte float double decimal 范围,及类型!
  14. 2021年衡水中学高考成绩查询,2019年衡水中学的高考成绩会怎样,看看往年的战绩就明白了...
  15. iOS 设置个人头像
  16. iOS 开发商品详情页中的banner中点击查看图片
  17. 小飞鱼通达二开 移动端接口显示“无办理权限”问题的处理(图文)
  18. 虚幻4学习笔记(8)动手制作一个小游戏
  19. html 绘制体温单,使用zrender.js绘制体温单效果
  20. DB2的rollforward前滚恢复

热门文章

  1. 教你UPS电池估算方法,UPS配置不再难
  2. 华为“鸿蒙”不接客?中美冲突把Windows搞凉,中国还有这款国产系统(附15款软件)...
  3. 传智播客成都中心最新开班时间
  4. 怎样使用电脑将拍摄的视频转成gif格式图片?
  5. root能不能能删除,root账号为什么不能删除
  6. 计算几何模板(大神整理)
  7. 【学术探讨】万能密码原理剖析
  8. 高中信息技术教学大纲
  9. 作为IT人,如何靠副业赚到第一桶金!
  10. pyinstall 打包python3.7.1的exe反编译