`
micheal19840929
  • 浏览: 167255 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于switch语句

    博客分类:
  • J2SE
阅读更多

switch语句在一定程度上是有动态跳转(函数指针就是一种动态跳转),另外switch语句绝对不是和if... else if ... else if等效的

switch语句有两种实现:

一、table switch

switch (key) {
case 2:
	...;
case 3:
	...;
case 5:
	...;
case 6:
	...;
}

  

这种语句会得到类似这样的效果:在代码中有对应2到6五个key值的语句起点——就是说包括并没有出现的4。可以这样看,5个起点被存储在一个数组中,可以直接用key - 2作为下标获得需要执行的语句位置。

二、lookup switch

switch (key) {
case 5:
	...;
case 100:
	...;
case 23:
	...;
case 1:
	...;
}

 

对于这种情况,table switch就会很浪费,因为需要整整100个项,而真正用到的key值只有四个。这个时候编译出的代码将只有4个项,分别对应1 5 23 100,是的被排序了。至于为什么排序,不作解释,该明白的人应该已经明白了。

switch语句也有弊端,因为生成的bytecode远比用一串if else大。同时由于需要更长的初始化时间,在项目比较少的时候可能会比if else还慢。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xueyong1203/archive/2006/07/16/928571.aspx

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics