.Net转Java.04.踩到switch的坑
今天线上有个NullPointerException 的异常,我翻了一下代码,抛异常的竟然是switch语句
我有种不祥的预感,本地做了实验
结果是
Java的switch如果传入null值,会抛出 java.lang.NullPointerException 的异常
看下面的代码,不要指望会跳到default分支,实际情况是在switch语句就抛异常了。
- // Java代码
- String s = null;
- switch (s) { //因为s=null 所以这里妥妥的会抛异常
- case "a":
- System.out.println("a");
- break;
- default:
- System.out.println("default");
- break;
- }
但是C#,程序会跳入到default
- // C#代码
- String s = null;
- switch (s)
- {
- case "a":
- Console.WriteLine("a");
- break;
- default:
- Console.WriteLine("default"); // 在C#中这行代码会正常输出
- break;
- }
另外总结一下C#和Java的switch的其他区别
为了防止误操作,C#如果某个case里边有语句,必须也要有break;但是Java没有这个限制,一直遇到break才退出。
否则会编译错误 Control cannot fall through from one case label ('case "a":') to another
- // C#代码
- switch (s)
- {
- case "a": // 这个地方编译失败 因为a下面有一个语句 Console.WriteLine("a");
- Console.WriteLine("a");
- case "b": // 这个地方可以编译通过,b下面没有语句
- case "c":
- Console.WriteLine("b or c");
- break;
- default:
- Console.WriteLine("default");
- break;
- }
但是Java编译器没有这个防护措施
- // Java代码
- String s = "a";
- switch (s) {
- case "a":
- System.out.println("a");
- case "b":
- System.out.println("b");
- default:
- System.out.println("default");
- }
这段代码可以正常执行,返回结果是
- a
- b
- default
因为缺少break,导致三个case一个没拉下,全部执行了。。
除非你确实想这样,否则就是个bug了
Java到1.7switch才支持了String类型,1.6仅仅支持char,byte,short,int,另外枚举类型也是没有问题的
.Net转Java.04.踩到switch的坑的更多相关文章
- Java 7 中的Switch 谈 Java版本更新和反编译知识
Java 7 中的Switch 谈 Java版本更新和反编译知识 学习编程,享受生活,大家好,我是追寻梦的飞飞.今天主要讲述的是Java7中的更新Switch实现内部原理和JAD反编 ...
- Java日常开发的21个坑,你踩过几个?
前言 最近看了极客时间的<Java业务开发常见错误100例>,再结合平时踩的一些代码坑,写写总结,希望对大家有帮助,感谢阅读~ 1. 六类典型空指针问题 包装类型的空指针问题 级联调用的空 ...
- Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用
ylbtech-Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用 1.返回顶部 1. Java 实例 - enum 和 switch 语句 ...
- Java流程控制,for,switch,while.break,continue,return
Java流程控制,for,switch,while.break,continue,return
- Java 14中对switch的增强,终于可以不写break了
面对这样的if语句,你是不是很难受呢? if (flag == 1) { log.info("didispace.com: 1"); } else if (flag == 2) { ...
- 安装python爬虫scrapy踩过的那些坑和编程外的思考
这些天应朋友的要求抓取某个论坛帖子的信息,网上搜索了一下开源的爬虫资料,看了许多对于开源爬虫的比较发现开源爬虫scrapy比较好用.但是以前一直用的java和php,对python不熟悉,于是花一天时 ...
- [原创]阿里云RocketMQ踩过的哪些坑
由于公司的最近开始使用RocketMQ来做支付业务处理, 便开启了学习阿里云RocketMQ的学习与实践之路, 其中踩了不少的坑, 大部份是由于没有仔细查看阿里云的技术文档而踩的坑. 但是有一个非常大 ...
- Redis上踩过的一些坑
来自: http://blog.csdn.net//chenleixing/article/details/50530419 上上周和同事(龙哥)参加了360组织的互联网技术训练营第三期,美团网的DB ...
- Android Camera开发经验总结以及踩过的那些坑
写在开头 需求方:上传试卷的时候,用户自己拍的照片有很多问题.如:不清晰.图片歪了.错误图片等.我们要是能够对拍摄照片进行识别处理就好了,能够裁切矫正就更好了,最好可以像二维码扫描一样,直接识别处理- ...
随机推荐
- du -h排序
du -sh * du -s /tmp/*|sort -nr|head -3
- Python 面向对象5 多态
一.多态 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作,简单的说就是一句话:允许将 ...
- BZOJ3172 [Tjoi2013]单词 字符串 SA ST表
原文链接http://www.cnblogs.com/zhouzhendong/p/9026543.html 题目传送门 - BZOJ3172 题意 输入$n(n\leq 200)$个字符串,保证长度 ...
- IntelliJ IDEA 插件 阿里巴巴Java开发手册(Alibaba Java Coding Guidelines)
以前看到过个:Java开发手册(阿里巴巴-公开版),这是个pdf文档,里面描述了一些Java开发的规约,里面确实有很多好用的规约,要是在学校就有机会看看的话,那么,在毕业之后,实际工作中就会少很多坑. ...
- HDU 4825 Xor Sum (模板题)【01字典树】
<题目链接> 题目大意: 给定n个数,进行m次查找,每次查找输出n个数中与给定数异或结果最大的数. 解题分析: 01字典树模板题,01字典树在求解异或问题上十分高效.利用给定数据的二进制数 ...
- Java 浮点数精度丢失
Java 浮点数精度丢失 问题引入 昨天帮室友写一个模拟发红包抢红包的程序时,对金额统一使用的 double 来建模,结果发现在实际运行时程序的结果在数值上总是有细微的误差,程序运行的截图: 输入依次 ...
- c++简单学习
在c++中我们很容易遇到字符串的分割处理问题,这种问题通常比较容易,但由于我比较菜,花费了一定时间去思考一个和字符串相关的题,该题的大概思路是利用取模运算后,将得到的单个字符进行分析,主要考察到了字符 ...
- Java NIO- 最好文档
http://www.cnblogs.com/puyangsky/p/5840873.html 1 背景介绍 在上一篇文章中我们介绍了Java基本IO,也就是阻塞式IO(BIO),在JDK1.4版本后 ...
- Standford CoreNLP使用
1.官网https://stanfordnlp.github.io/CoreNLP/ 2. 待续...
- [JLOI2012]时间流逝
Description: 你有n个食物,每个食物有\(a_i\)的价值,你每天有\(p_i\)的几率被抢走一个最小价值的食物,否则可以等概率获得所有食物中价值小于你拥有的食物中最大价值中的一个,问总价 ...