Switch用String做参数
Switch能否用String做参数?
参数可以是整数表达式,JDK1.5开始支持Enum类,JDK1.7开始支持String。
当字符串不会频繁改变时可以用枚举来代替String:用Enum.parse。
public enum Weekend{Monday,Tuesday,Friday,}public void Test(string week){Weekend weekend = (Weekend)Enum.Parse(typeof(Enum), week, false);//转换一下switch (weekend){case Weekend.Monday:Console.WriteLine("Today is Monday");break;case Weekend.Tuesday:Console.WriteLine("Today is Tuesday");break;case Weekend.Friday:Console.WriteLine("Today is Friday");break;default:break;}}
注意:
1.整数表达式可以是int和Integer,而byte、short、char等可以转换成int,所以也可以用。但是long和String不能转换成int,所以不能用
2.String时不能传入null作为参数,同时case语句中使用的字符串也不能为null,因为底层是通过equals和hashmap来判断的
</pre><pre name="code" class="javascript">public class Test {public void test(String str) {switch(str) {case "abc":System.out.println("abc");break;case "def":System.out.println("def");break;default:System.out.println("default");}}}
反编译后的结果:
public class Test {public void test(String str) {int i = -1;switch(str.hashCode()) {case 96354: // "abc".hashCode()if (str.equals("abc")) {i = 0;}break;case 99333: // "def".hashCode()if (str.equals("def")) {i = 1;}break;default:break;}switch(i) {case 0:System.out.println("abc");break;case 1:System.out.println("def");break;default:System.out.println("default");}}
}
PS:hashcode返回的是int型
可以发现:进行switch的实际是hash值,然后用equals进行安全检查(因为hash值可能会发生碰撞),所以性能不如枚举。switch支持String其实是一个语法糖,在编译后的字节码文件中都会被还原成原生类型,并在相应位置插入了强制转换代码,底层的JVM在switch上并没有修改。
当传入switch的是null时,在运行时对一个null调用hashCode()方法,会抛出NullPointerException;如果case写的是null,那么在编译时无法求出hashcode,就会编译报错。
Switch用String做参数相关推荐
- Switch能否用string做参数?
在JDK7以前,switch是不能够用String作为参数进行条件判断的,只能支持 byte.short.char.int或者其对应的封装类以及 enum 类型.但是在JDK之后,String作为参数 ...
- Switch可以用string做参数吗
在jdk1.7 之前,switch 只能支持 byte.short.char.int 这几个基本数据类型和其对应的封装类型.switch后面的括号里面只能放int类型的值,但由于byte,short, ...
- 2. Switch能否用String做参数?
Switch语句的参数类型 JDK1.6 的版本中,switch后面的括号里面只能放int类型的值, 注意是只能放int类型,但是放byte,short,char类型的也可以.是因为byte,shor ...
- 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 ...
- IDEA使用switch传入String编译不通过
今天在使用IDEA的时候,用到switch分支语句,传入String参数的时候一直报错,下面是源码报错截图: 看错误提示并没有提到switch支持String类型,不过ava1.7之后就支持Strin ...
- [基础题]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接口做参数,接口回调 接口做参数:将实现某接口的类的对象的引用用作参数传递给该接口参数.该接口通过回调来实现该接口方法. 接口回调:实现某接口的类的对象的引用,赋值给该接口声明的接口变量. 难 ...
最新文章
- Eclipse将android 类编译为jar类库
- 算法----实现strStr 函数
- 关于table和td的边框设置
- ImportError: No module named sklearn.metrics
- linux grep命令详解_Linux 上USB 调试神器lsusb命令详解
- zoj 3209 Dancing links/hust 1017
- html语言可以干什么,JavaScript语言能做什么?
- 数值分析 python_数值分析python代码
- 百度编辑器在服务器置顶路径 解决上传图片创建目录失败的方法(Thinkphp)
- ROS:激光雷达+laser_scan_matcher 运行gmapping
- CSS里 @import用法
- Win10/Win11:恢复Win7照片查看器
- php mds函数,MDSRank类解析 - linux_hunter的个人页面 - OSCHINA - 中文开源技术交流社区...
- [网络流24题] 06 最长递增子序列(最多不相交路径,最大流)
- 5.Python格式化输出
- 求两个正整数的最大公约数和最小公倍数
- 火狐浏览器Firefox上DownThemAll插件
- Linux下cp命令
- Python学习笔记 - Python语言概述和开发环境
- xwiki部署_开源Wiki应用平台---XWiki的部署