添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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字节码文件结构中,并没有“枚举”这个类型。其实源程序的枚举类型,会在编译期被编译成一个普通了类。利用继承和反射来做到的。

问题switch 参数不能是null,swicth(null)会报java.lang.NullPointerException异常查找原因为什么会这样呢,查找一下原因:找到编译后的class文件,就明白了总结:switch 是一个语法糖。switch语句是先计算 param 变量的排序值,然后与枚举常量的每个排序值进行对比。源码中的switch(param) 调用了String 的hashCode方法。switch 方法只支持int 类型的匹配,其他基本类型都会被语法糖转换为整型来做判断
switch switch 可以有 null 吗? 在 switch 语句 ,表达式的值不能是 null ,否则 在运行时抛出 Null PointerException。在case子句 也不能使用 null ,否则 出现编译错误。 switch 支持的类型有? Java 7 加入了对String类型的支持。所以支持的有:char、byte、short、int 和 Character、Byte、Short、Integer
- expression 是要求的整数表达式。 - value1、value2 等是要与 expression 进行比较的常量值。 - 当 expression 的值与 case 的值匹配时,就执行相应的语句。 - break 语句是可选的,它用于终止 switch 语句。如果没有 break,就 继续执行下一个 case。 - default 语句是可选的,它在所有 case 都不匹配时执行。 举个例子: int day = 3; switch (day) { case 1: System.out.println("星期一"); break; case 2: System.out.println("星期二"); break; case 3: System.out.println("星期三"); break; case 4: System.out.println("星期四"); break; case 5: System.out.println("星期五"); break; case 6: System.out.println("星期六"); break; case 7: System.out.println("星期日"); break; default: System.out.println("错误的输入"); break; 输出结果:星期三 希望这对你有帮助! 计算机网络—一个自治系统有5个局域网,其连接图如图所示。LAN2至LAN5上的主机数分别为:91,150,3,15。该自治系统分配到的IP地址块为30.138.118/23。试给出每一个局域网的地址块 57467