在java值有三大迴圈與句,for swichwhile 除此之外還有一個與while相差無幾的do....while;
swich迴圈語法如下:
switch (key) { case value: break; default: break; }
其中的key值就是變數,這個變數的型別可以為什麼呢?
答:在JDK1.5之前,switch迴圈只支援byte short char int四種資料型別.JDK1.5在switch迴圈中增加了列舉類與byteshortcharint的包裝類,對四個包裝類的支援是因為java編譯器在底層手動進行拆箱,而對列舉類的支援是因為列舉類有一個ordinal方法,該方法實際上是一個int型別的數值.jdk1.7開始支援String型別,但實際上String型別有一個hashCode演演算法,結果也是int型別.而byteshortchar型別可以在不損失精度的情況下向上轉型成int型別.所以總的來說,可以認為switch中只支援int.
我們來看資料型別的大小 (從小到大):byte―> short, char―> int ―> long―>float ―> double
我們清楚資料型別小轉大是不需要強轉的所以int以下包含int就是swich迴圈中key值所包含的資料型別
下面有一個小例題:
public static void main(String[] args) { /*byte x = 1; short x = 1; String x = "1"; long x = 1; double x = 1; int x =1; char x =1; Integer x = new Integer("1");*/ switch (x) { case 1: System.out.println("One"); break; case 2: System.out.println("Two"); break; } }
總結:swich所支援的基本資料型別有:byte,short ,char,int。以及他們封裝型別如:Integer Byte等...
ps:下面看下switch支援的資料型別
在JDK1.5之前,switch迴圈只支援byte short char int四種資料型別。JDK1.5 在switch迴圈中增加了列舉類與byte short char int的包裝類,對四個包裝類的支援是因為java編譯器在底層手動進行拆箱,而對列舉類的支援是因為列舉類有一個ordinal方法,該方法實際上是一個int型別的數值。
JDK1.7開始支援String型別,但實際上String型別有一個hashCode演演算法,結果也是int型別。而byte short char型別可以在不損失精度的情況下向上轉型成int型別。所以總的來說,可以認為switch中只支援int。
package test.switch_com; public class Demo1_Switch { /** **/ public static void main(String[] args) { checkName("no"); //checkName1(2); } public static void checkName(String op) { switch (op) { case "no": System.out.println("op"); break; case "contains": System.out.println("contains"); break; default: break; } } /*錯誤示例 public static void checkName1(long op) { switch (op) { case 1: System.out.println("op"); break; case 2: System.out.println("contains"); break; default: break; } }*/ }
[zhang3221994 ] switch迴圈所支援的資料型別案例分析已經有231次圍觀