在开发过程中,我发现与使用when相比,使用看起来更好if-else.所以,我很好奇在简单的情况下使用when而不是典型if-else的情况会对性能产生影响(即使它很小).一个例子是:
val someNumber = when (someObject) {
null -> 0
else -> someCalculation()
}
Run Code Online (Sandbox Code Playgroud)
与
val someNumber = if (someObject == null) {
0
} else {
someCalculation()
}
Run Code Online (Sandbox Code Playgroud)
两者之间有性能差异吗?
s1m*_*nw1 11
tl;博士:不,你不应该期望when减慢任何事情.
编译器重用if/else,switch和三元运算符构造来表达when语句.举个例子:
fun whenApplication(someObject: String?) = when (someObject) {
null -> 0
else -> 2
}
Run Code Online (Sandbox Code Playgroud)
它的字节码显示为Java代码:
public static final int whenApplication(@Nullable String someObject) {
return someObject == null ? 0 : 2;
}
Run Code Online (Sandbox Code Playgroud)
这里显示了稍微复杂的测试时间:
fun whenApplication(someObject: Any?) = when (someObject) {
is Int -> 2
in 0..2 -> 4
else -> 5
}
Run Code Online (Sandbox Code Playgroud)
和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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1618 次 |
| 最近记录: |