问题

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 语法糖相关推荐

  1. Java中switch都可以支持哪些数据类型

    Java中switch都可以支持哪些数据类型 在JDK1.5之前,switch循环只支持byte short char int四种数据类型. JDK1.5 在switch循环中增加了枚举类与byte ...

  2. 品味性能之道十一:JAVA中switch和if性能比较

    通常而言大家普遍的认知里switch case的效率高于if else.根据我的理解而言switch的查找类似于二叉树,if则是线性查找.按照此逻辑推理对于对比条件数目大于3时switch更优,并且对 ...

  3. Java 中 switch 的用法

    Java 中 switch 的用法 1.switch 中的表达式的数据的数据类型为 byte, short, int, char, String(jdk > 1.7支持 String 类型) 2 ...

  4. java中switch用法举例范围_Java中Switch用法代码示例

    一.java当中的switch与C#相比有以下区别 注:在java中switch后的表达式的类型只能为以下几种:byte.short.char.int(在Java1.6中是这样), 在java1.7后 ...

  5. 关于Java中Switch支持的数据类型

    Java中Switch支持byte.short.char.int四种基本类型,在JDK1.5中支持了枚举类型以及byte.short.char.int四种基本数据类型的包装类,在JDK1.7中支持了S ...

  6. java直接调用复制文件,java中文件复制的4种方式,java文件的复制

    java中文件复制的4种方式,java文件的复制 今天一个同事问我文件复制的问题,他一个100M的文件复制的指定目录下竟然成了1G多,吓我一跳,后来看了他的代码发现是自己通过字节流复制的,定义的字节数 ...

  7. java 中的finally你知多少_「JAVA」详述Java异常体系,处理异常时配上finally效果更佳...

    什么是异常 从事Java开发的小伙伴对于"异常"应该不陌生,因为每天都会遇到不少异常,或捕获,或抛出.那究竟什么是异常?异常即非正常的,不同于平常.一般化的情况.在平时生活中,医生 ...

  8. java中常量final的用法_详解Java中final的用法

    本文主要介绍了Java中final的使用方法,final是java的关键字,本文就详细说明一下它的使用方法,需要的朋友可以参考下 概念 final 具有"不可改变的"的含义,可以修 ...

  9. JAVA中两个char类型相加_1、JAVA中的几种基本类型,各占用多少字节?

    1.Java是一种强类型语言.这就意味着必须为每一个变量声明一种类型.在Java中,-共有8种基本类型,其中有4种整型.2种浮点类型.1种用于表示Unicode编码的字符单元的字符类型char和1种用 ...

最新文章

  1. 图论-最短路Dijkstra算法详解超详 有图解
  2. 【Binder 机制】AIDL 分析 ( 创建 AIDL 文件 | 创建 Parcelable 类 | AIDL 中使用 Parcelable 类 | 编译工程生成 AIDL 对应的Java源文件 )
  3. c++构建工具之xmake使用实例
  4. Geoserver怎样设置地图不同路线显示不用颜色样式(同一个图层组设置多个图层不同样式)
  5. 求一个二维整数数组最大子数组之和,时间复杂度为N^2
  6. 角色关联权限操作-代码实现
  7. 地图的平移、缩放的实现(android版)
  8. jetty设置双向ssl_在Jetty中设置SSL
  9. 在Linux终端下调用可执行文件时总要加上符号./的原因
  10. 这些Windows 10隐藏秘技,你知道几个?
  11. wifi情况下使用fiddler_钢筋网片在什么情况下使用?
  12. mongodb数组更新操作符$addToSet
  13. vue修改config后怎么生效_梦幻西游 金银锦盒修改后资金怎么攥 可以考虑跑商
  14. 开源 免费 java CMS - FreeCMS1.5 标签 ajaxStore
  15. 190430每日一句
  16. 电子电路设计——multisum中快捷设置555定时器
  17. 基于深度学习的13种通用图像分类模型及其实现
  18. 2018年9月份面试小记
  19. 文件夹的“只读”属性
  20. python变量无需创建赋值_阿博的Python之路-变量

热门文章

  1. 16位的数字高字节和低字节_掩盖8位数字的较低和较高半字节| 8085微处理器
  2. java中map的遍历方法_Java中Map的三种遍历方式
  3. java在什么环境变量_Java-环境变量
  4. Python datetime __str __()方法与示例
  5. Redis 面试题汇总
  6. 最详细的 IDEA调试教程
  7. 后台设计中容易被忽略的坑
  8. 【VSCode】VSCode使用conda环境时找不到python包/找不到Module
  9. 计算机图形学颜色表示,计算机图形学 颜色表示模型.ppt
  10. 生物学专业_江南大学微生物学(发酵)20002008历年考研专业课真题汇编