使用“when”而不是“if-else”的任何性能成本?

时间:2018-04-04 05:14:04

标签: kotlin

在开发过程中,我发现与when相比,使用if-else看起来好多倍。所以,我很好奇在简单的情况下使用when而不是典型的if-else是否会对性能产生影响(即使它很小)。一个例子是:

val someNumber = when (someObject) {
    null -> 0
    else -> someCalculation()
}

val someNumber = if (someObject == null) {
    0
} else {
    someCalculation()
}

两者之间是否有性能差异?

1 个答案:

答案 0 :(得分:9)

tl;博士:不,你不应该期望when放慢速度。

编译器重用if / else,switch和三元运算符构造来表达when语句。举个例子:

fun whenApplication(someObject: String?) = when (someObject) {
    null -> 0
    else -> 2
}

其字节码显示为Java代码:

public static final int whenApplication(@Nullable String someObject) {
   return someObject == null ? 0 : 2;
}

这里显示了稍微复杂的测试时间:

fun whenApplication(someObject: Any?) = when (someObject) {
    is Int -> 2
    in 0..2 -> 4
    else -> 5
}

相应的字节码为Java:

public static final int whenApplication(@Nullable Object someObject) {
    int var10000;
    if (someObject instanceof Integer) {
       var10000 = 2;
    } else {
       byte var2 = 0;
       var10000 = CollectionsKt.contains((Iterable)(new IntRange(var2, 2)), someObject) ? 4 : 5;
    }

    return var10000;
}