A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© huangxuanheng 中级黑马   /  2014-8-7 22:11  /  2642 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

switch和if哪个效率更高?为什么?

21 个回复

倒序浏览
这个在视频有讲到啊   若是判断的数据不多,且符合byte/short/int/char类型,使用switch语句效率稍高
回复 使用道具 举报
本帖最后由 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
回复 使用道具 举报
这个怎么说呢,在不同的地方用不同的判断语句,如果楼主用jdk1.7用来判断类似男女那种的,switch最好了,因为switch是给了cast一个标志,这个标志代表了下面的代码,if判断是每一次判断都开辟一块空间,效率肯定是没switch高的,这个主要还是看楼主用与判断的数据是什么,jdk1.7的switch可以判断字符串喔,底层是基于hashCode码来判断的
回复 使用道具 举报
3L 回复的很详细,针对不同的情况使用不同的方法才是最高效的
回复 使用道具 举报
switch 适合用于等值的判断,而 if 适合用于对区间的判断
回复 使用道具 举报
fantacyleo 发表于 2014-8-7 22:52
Java的switch和C的switch一样,编译后会生成一个类似Map的结构,比如:

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

:loveliness:
回复 使用道具 举报
舍我其谁 发表于 2014-8-8 00:16
switch 适合用于等值的判断,而 if 适合用于对区间的判断

:D...........
回复 使用道具 举报
switch,switch像是我们做选择,选择几就是几,就是有这个选项能直接去选项执行,if就像做判断,先判断第一句代码符不符合,不符合就再判断下一句,不对再向下.......就这样一直到找到符合就完了,不过我说的这些是针对要判断好多的时候
回复 使用道具 举报
侯岩卿 来自手机 中级黑马 2014-8-9 22:41:30
10#
没有哪个效率高!只有哪个合适!针对不同的情况用不同的判断方式。
回复 使用道具 举报
如果能用switch,当然switch效率能高点。
回复 使用道具 举报
楼上说得对
回复 使用道具 举报
liqi 中级黑马 2014-8-10 22:31:29
13#
这个知识点都忘了,复习了一遍
回复 使用道具 举报
看需求而定
回复 使用道具 举报
这个是看情况的。。不同的情况下有不同的判断。。多做点题,慢慢就明白了
回复 使用道具 举报
fantacyleo 发表于 2014-8-7 22:52
Java的switch和C的switch一样,编译后会生成一个类似Map的结构,比如:

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

有意思......
回复 使用道具 举报
看需求~~~
回复 使用道具 举报
Bule丶 发表于 2014-8-7 22:53
这个怎么说呢,在不同的地方用不同的判断语句,如果楼主用jdk1.7用来判断类似男女那种的,switch最好了,因 ...

恩恩,略能感受到了
回复 使用道具 举报
wawsc5354524 发表于 2014-8-8 00:12
3L 回复的很详细,针对不同的情况使用不同的方法才是最高效的

是啊,实事求是
回复 使用道具 举报
舍我其谁 发表于 2014-8-8 00:16
switch 适合用于等值的判断,而 if 适合用于对区间的判断

:victory::handshake
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马