在 BeanShell 中,switch 語句不僅僅可以接收數值類型的參數還能傳入對象類型。比如,你可以 switch 日期和字元串,相當于使用了他們各自的 equals() 方法比較相等:
<b>代碼執行個體</b>
dateobj = new Date();
switch( dateobj )
{
case newYears:
break;
case christmas:
default:
}
<b>運作效果</b>
<a target="_blank"></a>
上例中,首先建立“Date”類型的對象“dateobj”,兩個字元串,通過 switch 語句傳入“dateobj”。
經 過第一個case的時候,“dateobj”對象與“newYears”字元串進行比較。由于一個是日期類型,另一個是字元串類型,是以 “dateobj”通過自帶的“toString()”方法轉換成字元串類型後與之進行比較。顯然是不相等的,是以進入第二個case繼續進行比較。
最後兩個case都不比對,是以進入default,列印出“dateobj”的資訊。順便提一下,print(對象)相當于print(對象.toString())。
再看如下的效果:
唯 一的不同就是将“newYears”的值改變為數字“2012”。這樣“newYears”就預設成為數值類型的變量。運作後出現了Error,顯然是在 進行第一次case的時候,作為日期類型的“dateobj”沒有變為數值類型的方法,是以出現mismatch的錯誤。
再看兩個例子:
“i”和“j”都是 Integer 類型的類類型變量,case後相等,可見比較的是變量的值。
“i”為 Integer 類型的變量,“j”為不帶類型的數值變量,“z”為int類型的變量。兩個case比較後都相等,列印出相應資訊。
<b>總結</b>
如果 switch 中傳入的參數類型與 case 中的一緻,則直接對值進行比較;否則,轉換成一緻的類型再進行比較。
本文轉自 tongqiuyan 51CTO部落格,原文連結:http://blog.51cto.com/tongqiuyan/751363