Java中switch参数传null会引起异常——Java 语法糖
问题
switch 参数不能是null,swicth(null)会报java.lang.NullPointerException异常
查找原因
为什么会这样呢,查找一下原因:
找到编译后的class文件,就明白了
总结:
switch 是一个语法糖。switch语句是先计算 param 变量的排序值,然后与枚举常量的每个排序值进行对比。
源码中的switch(param) 调用了String 的hashCode方法。
switch 方法只支持int 类型的匹配,其他基本类型都会被语法糖转换为整型来做判断和匹配。
总结一下,java switch 参数不能是null,swicth(null)会报java.lang.NullPointerException异常。
扩展
Java 其它语法糖
语法糖(Syntactic Sugar),也叫糖衣语法,是英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语。指的是,在计算机语言中添加某种语法,这种语法能使程序员更方便的使用语言开发程序,同时增强程序代码的可读性,避免出错的机会;但是这种语法对语言的功能并没有影响。
泛型:
与C#中的泛型相比,Java的泛型可以算是“伪泛型”了。在C#中,不论是在程序源码中、在编译后的中间语言,还是在运行期泛型都是真实存在的。Java则不同,Java的泛型只在源代码存在,只供编辑器检查使用,编译后的字节码文件已擦除了泛型类型,同时在必要的地方插入了强制转型的代码。
自动拆箱和装箱:
自动拆箱/装箱是在编译期,依据代码的语法,决定是否进行拆箱和装箱动作。
装箱过程:把基本类型用它们对应的包装类型进行包装,使基本类型具有对象特征。
拆箱过程:与装箱过程相反,把包装类型转换成基本类型。
foreach 循环:
Foreach要求被历遍的对象要实现Iterable接口,由此可想而知,foreach迭代也是调用底层的迭代器实现的。
枚举:
枚举类型其实并不复杂,在JVM字节码文件结构中,并没有“枚举”这个类型。其实源程序的枚举类型,会在编译期被编译成一个普通了类。利用继承和反射来做到的。
Java中switch参数传null会引起异常——Java 语法糖相关推荐
- Java中switch都可以支持哪些数据类型
Java中switch都可以支持哪些数据类型 在JDK1.5之前,switch循环只支持byte short char int四种数据类型. JDK1.5 在switch循环中增加了枚举类与byte ...
- 品味性能之道十一:JAVA中switch和if性能比较
通常而言大家普遍的认知里switch case的效率高于if else.根据我的理解而言switch的查找类似于二叉树,if则是线性查找.按照此逻辑推理对于对比条件数目大于3时switch更优,并且对 ...
- Java 中 switch 的用法
Java 中 switch 的用法 1.switch 中的表达式的数据的数据类型为 byte, short, int, char, String(jdk > 1.7支持 String 类型) 2 ...
- java中switch用法举例范围_Java中Switch用法代码示例
一.java当中的switch与C#相比有以下区别 注:在java中switch后的表达式的类型只能为以下几种:byte.short.char.int(在Java1.6中是这样), 在java1.7后 ...
- 关于Java中Switch支持的数据类型
Java中Switch支持byte.short.char.int四种基本类型,在JDK1.5中支持了枚举类型以及byte.short.char.int四种基本数据类型的包装类,在JDK1.7中支持了S ...
- java直接调用复制文件,java中文件复制的4种方式,java文件的复制
java中文件复制的4种方式,java文件的复制 今天一个同事问我文件复制的问题,他一个100M的文件复制的指定目录下竟然成了1G多,吓我一跳,后来看了他的代码发现是自己通过字节流复制的,定义的字节数 ...
- java 中的finally你知多少_「JAVA」详述Java异常体系,处理异常时配上finally效果更佳...
什么是异常 从事Java开发的小伙伴对于"异常"应该不陌生,因为每天都会遇到不少异常,或捕获,或抛出.那究竟什么是异常?异常即非正常的,不同于平常.一般化的情况.在平时生活中,医生 ...
- java中常量final的用法_详解Java中final的用法
本文主要介绍了Java中final的使用方法,final是java的关键字,本文就详细说明一下它的使用方法,需要的朋友可以参考下 概念 final 具有"不可改变的"的含义,可以修 ...
- JAVA中两个char类型相加_1、JAVA中的几种基本类型,各占用多少字节?
1.Java是一种强类型语言.这就意味着必须为每一个变量声明一种类型.在Java中,-共有8种基本类型,其中有4种整型.2种浮点类型.1种用于表示Unicode编码的字符单元的字符类型char和1种用 ...
最新文章
- 图论-最短路Dijkstra算法详解超详 有图解
- 【Binder 机制】AIDL 分析 ( 创建 AIDL 文件 | 创建 Parcelable 类 | AIDL 中使用 Parcelable 类 | 编译工程生成 AIDL 对应的Java源文件 )
- c++构建工具之xmake使用实例
- Geoserver怎样设置地图不同路线显示不用颜色样式(同一个图层组设置多个图层不同样式)
- 求一个二维整数数组最大子数组之和,时间复杂度为N^2
- 角色关联权限操作-代码实现
- 地图的平移、缩放的实现(android版)
- jetty设置双向ssl_在Jetty中设置SSL
- 在Linux终端下调用可执行文件时总要加上符号./的原因
- 这些Windows 10隐藏秘技,你知道几个?
- wifi情况下使用fiddler_钢筋网片在什么情况下使用?
- mongodb数组更新操作符$addToSet
- vue修改config后怎么生效_梦幻西游 金银锦盒修改后资金怎么攥 可以考虑跑商
- 开源 免费 java CMS - FreeCMS1.5 标签 ajaxStore
- 190430每日一句
- 电子电路设计——multisum中快捷设置555定时器
- 基于深度学习的13种通用图像分类模型及其实现
- 2018年9月份面试小记
- 文件夹的“只读”属性
- python变量无需创建赋值_阿博的Python之路-变量
热门文章
- 16位的数字高字节和低字节_掩盖8位数字的较低和较高半字节| 8085微处理器
- java中map的遍历方法_Java中Map的三种遍历方式
- java在什么环境变量_Java-环境变量
- Python datetime __str __()方法与示例
- Redis 面试题汇总
- 最详细的 IDEA调试教程
- 后台设计中容易被忽略的坑
- 【VSCode】VSCode使用conda环境时找不到python包/找不到Module
- 计算机图形学颜色表示,计算机图形学 颜色表示模型.ppt
- 生物学专业_江南大学微生物学(发酵)20002008历年考研专业课真题汇编