APP下载

Java面试题之switch 引数为null 会出现什么情况?

消息来源:baojiabao.com 作者: 发布时间:2024-05-15

报价宝综合消息Java面试题之switch 引数为null 会出现什么情况?

Java switch 引数如果为null(也就是 swicth(null)),会出现什么情况?

上述程式码输出结果(丢掷异常--答案是B):

Exception in thread "main" java.lang.NullPointerException

at SwitchTest.main(SwitchTest.java:4)

分析过程

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

2019-07-02 07:46:00

相关文章