我的博客原址关于更多BeanShell的博文请单击

在 BeanShell 中,switch 语句不仅仅可以接收数值类型的参数还能传入对象类型。比如,你可以 switch 日期和字符串,相当于使用了他们各自的 equals() 方法比较相等:

代码实例

 
  1. dateobj = new Date(); 
  2. switch( dateobj ) 
  3. case newYears: 
  4. break; 
  5. case christmas: 
  6. break; 
  7. default

运行效果

上例中,首先创建“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比较后都相等,打印出相应信息。

总结

如果 switch 中传入的参数类型与 case  中的一致,则直接对值进行比较;否则,转换成一致的类型再进行比较。