.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开发经验总结以及踩过的那些坑
写在开头 需求方:上传试卷的时候,用户自己拍的照片有很多问题.如:不清晰.图片歪了.错误图片等.我们要是能够对拍摄照片进行识别处理就好了,能够裁切矫正就更好了,最好可以像二维码扫描一样,直接识别处理- ...
随机推荐
- 设置sde表空间为自动增长
有的用户在测试数据时,希望在SDE表空间里面不受限制地导入数据,于是需要将SDE的表空间设置为自动增长. 过程描述 1.可以在创建sde表空间的时候,添加参数Autoextend on,修改后创建命令 ...
- 使用link rel="shortcut icon"为网页标题加图标
<title>会员卡券</title> <link rel="shortcut icon" href="http://GT/img/favi ...
- 2018牛客网暑假ACM多校训练赛(第七场)I Tree Subset Diameter 动态规划 长链剖分 线段树
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round7-I.html 题目传送门 - https://www.n ...
- asp gridview
<table> <tr> <td colspan="5">请选择试卷制定人员<span style="color:red&quo ...
- 总结几种清除浏览器的缓存,适用于明明已经修改bug,但是测试人员说问题还存在的情况下
1.meta方法<METAHTTP-EQUIV="pragma"CONTENT="no-cache"><METAHTTP-EQUIV=&quo ...
- 从函数式编程到Ramda函数库(一)
函数式编程是种编程方式,它将电脑运算视为函数的计算.函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值).和指令式编程相比, ...
- MacOs brew 命令行安装常见工具
brew类似ubuntu系统下的apt-get的功能 安装方法: 在Mac中打开Termal: 输入命令: ruby -e "$(curl -fsSL https://raw.githu ...
- [vscode] pylint在虚拟环境下错误告警问题
在左下角点击python, 选择对应的虚拟环境即可.
- JDK 1.8 新特性
default 函数式接口 待总结
- React Native小白入门学习路径——四
上一周一直在弄着老师布置的各种任务,再加上要做的都还没做完.所以上周的总结到现在才写完发出来..真的觉得老师太高估我们这些菜鸡了. 也许是我太着急了,在自己还没有足够储备去完成自己的项目,总觉得先找一 ...