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 语法糖的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【NLP】文本分类还停留在BERT?对偶
- 下一篇: 【Python】Python+Matpl