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

© 刘郑瑞 中级黑马   /  2013-1-21 10:28  /  2919 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

switch为什么比if...else的效率高?请赐教,详细点。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

9 个回复

倒序浏览
这个似乎涉及到底层了。好像是汇编那方面了
回复 使用道具 举报
因为switch的参数只能是int(其他6个基本数据类型的值,或自动提升安全转换,或强制转换,都可以)
而if的条件可以很复杂,这样,其实编译器就顺便给switch做了优化,为了提高效率嘛!而if的条件复杂,编译器就不管咯。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
请问楼主如何知道switch比if...else的效率高的?
回复 使用道具 举报
我的理解,switch是选择题,
if...else是判断题,

switch是选择,给你个值给我找出这个值(选项的所有内容直接进内存比较),直接干活.
if...else是先判断,再干活,读到哪一句,那一句的内容进内存,进行逻辑判断.

也不知道对不对

还有一点,好想switch的参数也能char,记得老毕视频上说了

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 可以char

查看全部评分

回复 使用道具 举报
switch直接根据输标识去找那种情况,而if else则是一个一个去验证效率当然不高了
回复 使用道具 举报
switch的case条件都是编译期整数常量,编译器可以做到表格跳转查询,查找速度快,
缺点是:case条件都是编译期整数常量

if/else是一个挨一个的查询,速度较慢,
优点是:不限比较类型和内容,你可以使用double,float,string或是自定义类型,比较双方不必是编译期常量。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
焦健 来自手机 高级黑马 2013-1-23 01:07:22
8#
case时编译时期的常量这种说法我赞同,所以效率略高,switch的功能在不断的完善1.5以后可以判断枚举,1.7以后甚至可以判断字符串,功能还是很强大的!!来自: Android客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马