在开发过程中,我发现与when
相比,使用if-else
看起来好多倍。所以,我很好奇在简单的情况下使用when
而不是典型的if-else
是否会对性能产生影响(即使它很小)。一个例子是:
val someNumber = when (someObject) {
null -> 0
else -> someCalculation()
}
与
val someNumber = if (someObject == null) {
0
} else {
someCalculation()
}
两者之间是否有性能差异?
答案 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;
}