Switch语句以及一个问题
来源:互联网 发布:linux网络监控软件 编辑:程序博客网 时间:2024/04/29 12:27
swich语句详解
在java7之前,switch语句只支持short,byte,char,int以及枚举类型还有他们基本类型的包装类型。实际上switch只支持int类型,如果选择条件为short,byte,char,系统会自动转换为int类型。但在java7之后,switch语句的选择条件支持String类型。
long d = 5;String str3 = "hello";switch((int)d) {case 5:System.out.println("helloworld");break;}
可以使用强制转换,那么编译器就不会报错.
switch支持String类型的实现原理
- 这个新特性是在编译器这个层次上实现的。而在Java虚拟机和字节码这个层次上还是只支持在switch语句中使用与整数类型兼容的类型。这么做的目的就是为了减少这个特性所影响的范围,以降低实现的代价。在编译器层次实现的含义是,虽然开发人员在Java源代码的switch语句中使用了字符串类型,但是在编译的过程中,编译器会根据源代码的含义进行转换,将字符串类型转换成与整数类型兼容的格式。不同的Java编译器可能采用不同的方式来转换,并采用不同的优化策略。比如:如果switch语句中只包含一个case语句,那么就可以简单的将其转换成一个if语句。如果包含一个case和一个default语句,就可以转换成if-else语句。而对于复杂的情况(多个case语句),也可以转换成Java 7 之前的switch语句,只不过使用字符串的哈希值作为switch语句表达式的值。经过转换,Java 虚拟机看到的仍然是与整数类型兼容的类型。这里要注意的是,在case字句中对应的语句块中仍然需要使用String的equals方法来进行字符串比较,这是因为哈希函数在映射的时候可能存在冲突,这样更加保险了。【转载:http://blog.csdn.net/chenguibao/article/details/51658054】
附:short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1呢?
short i = 2;i = (short)(i+2);//必须加强制转圜,否则会报错i += 2;//java规定的运算符,编译器会对他进行处理对于short s1 = 1; s1 = s1 + 1;由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 +=是java 语言规定的运算符,java 编译器会对它进行特殊处理,因此可以正确编译。
1 0
- Switch语句以及一个问题
- 定义一个枚举类型以及switch语句使用
- switch 语句相关问题
- switch语句穿透问题
- 03 一个计算器,switch语句
- java的switch语句问题
- switch语句的输出问题
- Switch语句的相关问题
- Switch语句的一个坑 & 一个妙用
- 如何用开关语句switch编写一个坐车买票的问题
- switch 语句的一个小谜团
- java switch语句的一个例子
- 关于switch语句的一个小代码
- js语句switch的一个小案例
- java switch语句的一个例子
- OC_01基本概念,if语句switch-case语句以及枚举
- switch语句以及三种循环语句的总结
- 关于java中switch语句的问题
- 带权路径最短——Dijkstra算法
- ppt、pptx的文件自动批量生成缩略图
- ksz8081网卡芯片
- 解决SD Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
- python redis模块订阅与发布
- Switch语句以及一个问题
- CSDN初体验
- 解决页面上table表格中的null值,
- 汉字转拼音(java)
- C# 中的一些 基本语句,数组的格式.3
- Windows下DOS命令大全(经典收藏)
- ZooKeeper
- PAT - 甲级 - 1114. Family Property (25) (并查集)
- Curator教程(二)Path Cache监听ZNode