在 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