免费微网站怎么做,建建设人才市场官方网站,wordpress二次开发视频,WordPress主题MX互动问题
switch 参数不能是null#xff0c;swicth(null)会报java.lang.NullPointerException异常
查找原因
为什么会这样呢#xff0c;查找一下原因#xff1a; 找到编译后的class文件#xff0c;就明白了 总结#xff1a;
switch 是一个语法糖。switch语句是先计算 par…问题
switch 参数不能是nullswicth(null)会报java.lang.NullPointerException异常
查找原因
为什么会这样呢查找一下原因 找到编译后的class文件就明白了 总结
switch 是一个语法糖。switch语句是先计算 param 变量的排序值然后与枚举常量的每个排序值进行对比。
源码中的switch(param) 调用了String 的hashCode方法。
switch 方法只支持int 类型的匹配其他基本类型都会被语法糖转换为整型来做判断和匹配。
总结一下java switch 参数不能是nullswicth(null)会报java.lang.NullPointerException异常。
扩展
Java 其它语法糖
语法糖Syntactic Sugar也叫糖衣语法是英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语。指的是在计算机语言中添加某种语法这种语法能使程序员更方便的使用语言开发程序同时增强程序代码的可读性避免出错的机会但是这种语法对语言的功能并没有影响。
泛型
与C#中的泛型相比Java的泛型可以算是“伪泛型”了。在C#中不论是在程序源码中、在编译后的中间语言还是在运行期泛型都是真实存在的。Java则不同Java的泛型只在源代码存在只供编辑器检查使用编译后的字节码文件已擦除了泛型类型同时在必要的地方插入了强制转型的代码。
自动拆箱和装箱
自动拆箱/装箱是在编译期依据代码的语法决定是否进行拆箱和装箱动作。
装箱过程把基本类型用它们对应的包装类型进行包装使基本类型具有对象特征。
拆箱过程与装箱过程相反把包装类型转换成基本类型。
foreach 循环
Foreach要求被历遍的对象要实现Iterable接口由此可想而知foreach迭代也是调用底层的迭代器实现的。
枚举
枚举类型其实并不复杂在JVM字节码文件结构中并没有“枚举”这个类型。其实源程序的枚举类型会在编译期被编译成一个普通了类。利用继承和反射来做到的。