switch能否能作用在byte上?能否能作用在long上?能否能作用在String上?


   switch能作用在byte上,不能作用在long上,從Java7開始可以作用在String上。

   本題考察的是switch知識。

  switch語句用於多分支選擇,在使用switch(expr)時,expr只能時一個枚舉常量(內部也是由整形或字符類型實現)或一個整數表達式,

其中,整數表達式可以是基本數據類型int或其對應的包裝類Integer,當然也包括不同的長度整形.例如short。由於byte,short和char都能夠

被隱式地轉換為int類型,因此,這些類型以及它們對應的包裝類都可以作為switch的表達式。但是,long,float,double及String類型由於不能夠

隱式地轉換為int類型,因此,它們不能被用作switch的表達式。如果一定要使用long,float或double作為switch的參數,必須將其強制轉換為

int型才可以。

   另外,與switch對應的是case語句,case語句之后可以是直接的常量數值,例如1,2也可以是一個常量計算式,例如1+2等,還可以是final型的變量

(final變量必須是編譯時的常量),例如final int a = 0,但不能是變量或帶有變量的表達式,例如i*2等。當然,更不能是浮點型數,例如1.1或者1.2/2等。

    隨着Java語言的發展,在Java7中,switch開始支持String類型了。

    從本質上講,switch對字符串的支持,其實是int類型值的匹配。它的實現原理如下:通過對case后面的String對象調用hashCode()方法,

得到一個int類型的Hash值,然后用這個Hash值來唯一標識着這個case。那么當匹配的時候,首先會調用這個字符串hashCode()方法,獲取一個Hash

值(int類型),用這個Hash值來匹配所有的case,如果沒有匹配成功,說名不存在;如果匹配成功了,接着會調用字符串的String.equals()方法進行匹配。

由此可以看出,String變量不能為null,同時,switch的case字句中使用的字符串也不能為null。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM