Switch能否用string做参数?
在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做参数?相关推荐
- 2. Switch能否用String做参数?
Switch语句的参数类型 JDK1.6 的版本中,switch后面的括号里面只能放int类型的值, 注意是只能放int类型,但是放byte,short,char类型的也可以.是因为byte,shor ...
- Switch可以用string做参数吗
在jdk1.7 之前,switch 只能支持 byte.short.char.int 这几个基本数据类型和其对应的封装类型.switch后面的括号里面只能放int类型的值,但由于byte,short, ...
- Switch用String做参数
Switch能否用String做参数? 参数可以是整数表达式,JDK1.5开始支持Enum类,JDK1.7开始支持String. 当字符串不会频繁改变时可以用枚举来代替String:用Enum.par ...
- 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 ...
- [基础题]2.(*)利用接口做参数,写个计算器,能完成加减乘除运算。
/*2.(*)利用接口做参数,写个计算器,能完成加减乘除运算. (1)定义一个接口Compute含有一个方法int computer(int n, int m). (2)设计四个类分别实现此接口,完成 ...
- 关于C#的Main(String[] args)参数输入问题
指定相关的测试代码 首先,写一个用于测试的关于Main(String[] args)参数输入有关的代码类,如下: using System; public class Hello { publ ...
- 利用接口做参数,写个计算器,能完成加减乘除运算。 (1)定义一个接口Compute含有一个方法int computer(int n, int m)。 (2)设计四个类分
代码 /*第二题:利用接口做参数,写个计算器,能完成加减乘除运算.(1)定义一个接口Compute含有一个方法int computer(int n, int m).(2)设计四个类分别实现此接口,完成 ...
- Java 接口做参数,接口回调
JAVA接口做参数,接口回调 接口做参数:将实现某接口的类的对象的引用用作参数传递给该接口参数.该接口通过回调来实现该接口方法. 接口回调:实现某接口的类的对象的引用,赋值给该接口声明的接口变量. 难 ...
- python中非怎么表示_【问题解答】Python中非十进制数做参数会自动转换成十进制么?...
问题:比如chr()函数,文档中说参数i应该是integer,但是输入0o47055.0x4e2d.0b100111000101101都可以得到字符"中". 还有就是网上写的2进制 ...
最新文章
- 基于开源TiRG的文本检测与提取实现
- linux rpm 包制作详解
- 机器学习(Machine Learning)- 吴恩达(Andrew Ng)-学习笔记
- a*算法流程图_光伏逆变器MPPT基本算法介绍李星硕
- 设计模式之十一:抽象工厂模式(Abstract Factory)
- Ubuntu软件安装
- 怎么查看过程xact_abort 是否开启_空调噪音大怎么办?
- java过滤器执行按什么排序_servlet过滤器及监听器
- 3. IPSEC-XXX与SSL-XXX的使用场景与在等保中涉及的条款
- 财务分析真不难!无需代码,一个模板直接复用,碾压上千Excel表
- 半导体器件物理【6】固体量子——各种电子有效质量 + 状态密度函数
- Java使用iTextPDF生成PDF文件
- C# int uint long ulong byte sbyte float double decimal 范围,及类型!
- 2021年衡水中学高考成绩查询,2019年衡水中学的高考成绩会怎样,看看往年的战绩就明白了...
- iOS 设置个人头像
- iOS 开发商品详情页中的banner中点击查看图片
- 小飞鱼通达二开 移动端接口显示“无办理权限”问题的处理(图文)
- 虚幻4学习笔记(8)动手制作一个小游戏
- html 绘制体温单,使用zrender.js绘制体温单效果
- DB2的rollforward前滚恢复