黑马程序员技术交流社区

标题: switch和if [打印本页]

作者: huangxuanheng    时间: 2014-8-7 22:11
标题: switch和if
switch和if哪个效率更高?为什么?

作者: liqiaohui    时间: 2014-8-7 22:34
这个在视频有讲到啊   若是判断的数据不多,且符合byte/short/int/char类型,使用switch语句效率稍高

作者: fantacyleo    时间: 2014-8-7 22:52
本帖最后由 fantacyleo 于 2014-8-8 02:25 编辑

Java的switch和C的switch一样,编译后会生成一个类似Map的结构,比如:
  1. int a = 3;
  2.                 switch(a) {
  3.                 case 1:
  4.                         System.out.println("1");
  5.                         break;
  6.                 case 2:
  7.                         System.out.println("2");
  8.                         break;
  9.                 case 3:
  10.                         System.out.println("3");
  11.                         break;
  12.                 }
复制代码

你可以认为编译器会生成一个size为4的Map叫switch_table,它的键值对对应是这样的:
key           value
1               case 1对应的语句
2               case 2对应的语句
3               case 3对应的语句
default     default对应的语句

对于a=3,找对应case子句就类似switch_table.get(3),一步完成。而换成if,则必须老老实实按顺序去判断每一个条件a==1 a==2 最后才是a==3
作者: Bule丶    时间: 2014-8-7 22:53
这个怎么说呢,在不同的地方用不同的判断语句,如果楼主用jdk1.7用来判断类似男女那种的,switch最好了,因为switch是给了cast一个标志,这个标志代表了下面的代码,if判断是每一次判断都开辟一块空间,效率肯定是没switch高的,这个主要还是看楼主用与判断的数据是什么,jdk1.7的switch可以判断字符串喔,底层是基于hashCode码来判断的
作者: wawsc5354524    时间: 2014-8-8 00:12
3L 回复的很详细,针对不同的情况使用不同的方法才是最高效的
作者: 舍我其谁    时间: 2014-8-8 00:16
switch 适合用于等值的判断,而 if 适合用于对区间的判断
作者: huangxuanheng    时间: 2014-8-8 21:05
fantacyleo 发表于 2014-8-7 22:52
Java的switch和C的switch一样,编译后会生成一个类似Map的结构,比如:

你可以认为编译器会生成一个size为 ...

:loveliness:
作者: huangxuanheng    时间: 2014-8-8 21:06
舍我其谁 发表于 2014-8-8 00:16
switch 适合用于等值的判断,而 if 适合用于对区间的判断

:D...........
作者: 忆梦追风    时间: 2014-8-9 22:36
switch,switch像是我们做选择,选择几就是几,就是有这个选项能直接去选项执行,if就像做判断,先判断第一句代码符不符合,不符合就再判断下一句,不对再向下.......就这样一直到找到符合就完了,不过我说的这些是针对要判断好多的时候
作者: 侯岩卿    时间: 2014-8-9 22:41
没有哪个效率高!只有哪个合适!针对不同的情况用不同的判断方式。
作者: shuimu_88    时间: 2014-8-10 00:34
如果能用switch,当然switch效率能高点。
作者: 多此一举    时间: 2014-8-10 13:37
楼上说得对
作者: liqi    时间: 2014-8-10 22:31
这个知识点都忘了,复习了一遍
作者: AEhaojiu    时间: 2014-8-10 22:44
看需求而定
作者: 郭旭辉    时间: 2014-8-11 00:23
这个是看情况的。。不同的情况下有不同的判断。。多做点题,慢慢就明白了
作者: huangxuanheng    时间: 2014-8-11 23:04
fantacyleo 发表于 2014-8-7 22:52
Java的switch和C的switch一样,编译后会生成一个类似Map的结构,比如:

你可以认为编译器会生成一个size为 ...

有意思......
作者: sunny~    时间: 2014-8-11 23:04
看需求~~~
作者: huangxuanheng    时间: 2014-8-11 23:05
Bule丶 发表于 2014-8-7 22:53
这个怎么说呢,在不同的地方用不同的判断语句,如果楼主用jdk1.7用来判断类似男女那种的,switch最好了,因 ...

恩恩,略能感受到了
作者: huangxuanheng    时间: 2014-8-11 23:24
wawsc5354524 发表于 2014-8-8 00:12
3L 回复的很详细,针对不同的情况使用不同的方法才是最高效的

是啊,实事求是
作者: huangxuanheng    时间: 2014-8-11 23:32
舍我其谁 发表于 2014-8-8 00:16
switch 适合用于等值的判断,而 if 适合用于对区间的判断

:victory::handshake
作者: 王凯路路    时间: 2014-8-11 23:40
switch效率高,但是有局限性,switch里面只能是基本数据类型. 但是在jdk1.7 String好像也能在switch里面应用了.
作者: happymouse    时间: 2014-8-11 23:46
fantacyleo 发表于 2014-8-7 22:52
Java的switch和C的switch一样,编译后会生成一个类似Map的结构,比如:

你可以认为编译器会生成一个size为 ...

很专业,赞一个




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2