栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

效率:将语句切换到if语句

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

效率:将语句切换到if语句

因为

switch
语句是使用两个特殊的JVM指令
lookupswitch
和编译的
tableswitch
。在处理很多案例时它们很有用,但是当您只有很少的分支机构时,它们会导致开销。

if/else
相反,一条语句被编译为典型的
je
jne
…链,这些链速度更快,但在长分支链中使用时需要更多的比较。

您可以通过查看字节码来看到差异,无论如何我都不担心这些问题,如果有什么可能成为问题,那么JIT会解决它。

实际示例:

switch (i){  case 1: return "Foo";  case 2: return "Baz";  case 3: return "Bar";  default: return null;}

编译成:

L0 LINENUMBER 21 L0 ILOAD 1 TABLESWITCH   1: L1   2: L2   3: L3   default: L4L1 LINENUMBER 23 L1frame SAME LDC "Foo" ARETURNL2 LINENUMBER 24 L2frame SAME LDC "Baz" ARETURNL3 LINENUMBER 25 L3frame SAME LDC "Bar" ARETURNL4 LINENUMBER 26 L4frame SAME ACONST_NULL ARETURN

if (i == 1)  return "Foo";else if (i == 2)  return "Baz";else if (i == 3)  return "Bar";else  return null;

被编译成

L0 LINENUMBER 21 L0 ILOAD 1 ICONST_1 IF_ICMPNE L1L2 LINENUMBER 22 L2 LDC "Foo" ARETURNL1 LINENUMBER 23 L1frame SAME ILOAD 1 ICONST_2 IF_ICMPNE L3L4 LINENUMBER 24 L4 LDC "Baz" ARETURNL3 LINENUMBER 25 L3frame SAME ILOAD 1 ICONST_3 IF_ICMPNE L5L6 LINENUMBER 26 L6 LDC "Bar" ARETURNL5 LINENUMBER 28 L5frame SAME ACONST_NULL ARETURN


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516578.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号