你知道switch是受jdk版本影響的嗎

看了很多的面試題,都會提及到switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?

大多數的答案都是可以是byte、short、char、int、enum、String類型,但是long類型不能,這麼回答太籠統了,不詳細。

你知道switch是受jdk版本影響的嗎

switch

第一點:小編在編碼閱歷中記得枚舉是從jdk1.5開始的

你知道switch是受jdk版本影響的嗎

枚舉

String是從jdk1.7開始支持的

你知道switch是受jdk版本影響的嗎

String

為什麼我要說版本問題:因為一些政府項目或者一些公司的老項目jdk的版本都比較低,當你在公司拿著jdk1.8的思想去編寫,就絕對是不兼容的,jdk1.8可以兼容1.6,但反過來是絕對不行的,老版本做不到 未雨綢繆,能做到這個那就不會升級版本了。

第二點:項目中很少碰見使用switch的,基本上都是使用if else,為什麼呢,可以說switch的處理是絕對比if速度快的,我給你們科普下原理(比如說a=0的判斷,switch和if在cpu上面的處理方式是不一樣的,switch是在編譯階段將子函數的地址和判斷條件綁定了,只要直接將a的值直接映射到子函數地址去執行就可以了,但是if處理起來就不一樣了,它首先要把a的值放到CPU的寄存器中,然後要把比較的值放到CPU的另一個寄存器中,然後做減法,然後根據計算結果跳轉到子函數去執行,這樣一來就要多出3步的操作了,如果邏輯判斷多的話,那麼將會比switch多出好多倍的操作)這也是因為當時的機器環境影響的,拿現在的機器來說,已經不成問題了。

①、現在大多數人不用是因為有的人會忘記寫break,而且編譯器還不會提示你,這個坑在我大學寫代碼時就經常遇見。

②、它不能處理複雜的問題,比如函數,上面也提到了,它只能在byte、short、char、int、enum、String上使用(這還得看jdk的版本)。

總結:1、switch在面試中是一個百試不爽的問題,只是簡單籠統的回答必然不會受到面試官青睞,拿出jdk各個版本來說switch的問題也可以證明你是一個比較細心的開發者,面試官必然給你加分;

2、switch固然有它的好也有它的不好,全部取決於你的想法,但開發中必須記得加入break和default,不然你會後患無窮。


分享到:


相關文章: