gpt4 book ai didi

java - 效率 : switch statements over if statements

转载 作者:IT老高 更新时间:2023-10-28 21:08:01 27 4
gpt4 key购买 nike

PMD告诉我

A switch with less than 3 branches is inefficient, use a if statement instead.

这是为什么呢?为什么是3?他们如何定义效率?

最佳答案

因为 switch 语句是用两个特殊的 JVM 指令编译的,即 lookupswitchtableswitch。它们在处理大量案例时很有用,但当您只有几个分支时它们会导致开销。

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: L4
L1
LINENUMBER 23 L1
FRAME SAME
LDC "Foo"
ARETURN
L2
LINENUMBER 24 L2
FRAME SAME
LDC "Baz"
ARETURN
L3
LINENUMBER 25 L3
FRAME SAME
LDC "Bar"
ARETURN
L4
LINENUMBER 26 L4
FRAME 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 L1
L2
LINENUMBER 22 L2
LDC "Foo"
ARETURN
L1
LINENUMBER 23 L1
FRAME SAME
ILOAD 1
ICONST_2
IF_ICMPNE L3
L4
LINENUMBER 24 L4
LDC "Baz"
ARETURN
L3
LINENUMBER 25 L3
FRAME SAME
ILOAD 1
ICONST_3
IF_ICMPNE L5
L6
LINENUMBER 26 L6
LDC "Bar"
ARETURN
L5
LINENUMBER 28 L5
FRAME SAME
ACONST_NULL
ARETURN

关于java - 效率 : switch statements over if statements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10458719/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com