【java】switch case支援的7種資料類型

來源:互聯網
上載者:User

標籤:init   reg   建立   表格   mac   枚舉類   表達   stat   枚舉   

switch運算式後面的資料類型只能是byte,short,char,int四種整形類型,枚舉類型和java.lang.String類型(從java 7才允許),不能是boolean類型。

在網上看到好多文章,說switch還支援byte,short,char,int 的封裝類,首先可以肯定說switch不支援這些封裝類,但是如下的代碼又是正確的:

    public static void main(String[] args) {        switch (new Integer(45)) {        case 40:            System.out.println("40");            break;        case 45:            System.out.println("45");//將會列印這句            break;        default:            System.out.println("?");            break;        }    }

可以列印正確的結果,在挨著挨著試完Byte,Short,Character,Integer後發現都可以正確列印,於是便說switch也支援byte,short,char,int的封裝類。這種說法不完全正確,之所以switch能夠支援他們的封裝類,是因為自動拆箱(就是自動將引用資料類型轉化為基礎資料型別 (Elementary Data Type))的原因,下面使用jclasslib軟體開啟上面的.class檔案,

 1 0 new #2 <java/lang/Integer>                             建立一個Integer類的對象 2 3 dup                                                    將對象的標識壓入棧頂部 3 4 bipush 45                                              將整形45壓入棧中 4 6 invokespecial #3 <java/lang/Integer.<init>>            調用Integer類型的構造方法 5 9 invokervirtual #4 <java/lang/Integer.intValue>         調用intValue()方法 6 12 lookupswitch 2 7         40:40(+28) 8         45:51(+39) 9         defalut:62(+50)10 40 getstatic #5 <java/lang/System.out>                   獲得標準輸出資料流11 43 ldc #6 <40>                                           從常量池中將40的索引壓入棧中12 45 invokevirtual #7 <java/io/PrintStream.println>        調用println()方法13 48 goto 70 (+22)14 51 gestatic #5 <java/lang/System.out>15 54 ldc #8 <45>16 56 invokevirtual #7 <java/io/PrintStream.println>17 59 goto 70 (+11)18 62 getstatic #5 <java/lang/System.out>19 65 ldc #9<?>20 67 invokevirtual #7 <java/io/PrintStream.println>21 70 return

從上面的第5行我們可以看出編譯器自動調用了intValue()方法,如果是使用Byte會自動調用byteValue()方法,如果是Short會自動調用shortValue()方法,如果是Integer會自動調用intValue()方法。switch 的尋找原理是使用key-offset在目標表格中尋找的,lookupswitch後面的數字和goto後面的數字都是有規律的,關於更多資訊可以查看The Java® Virtual Machine Specification

因此switch運算式後面的資料類型只能是byte,short,char,int四種整形類型,枚舉類型和java.lang.String類型。

【java】switch case支援的7種資料類型

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.