Kotlin的范围判断语法效率是否与不等号条件判断一致?
Kotlin 范围判断性能问题解答
结论
x in 1..100000 写法和 1 <= x && x <= 100000 写法性能完全等价,你可以优先选择可读性更好的范围判断写法,不需要担心效率问题。
原理说明
你担心的逐一遍历区间内元素的情况不会发生:
- Kotlin 针对 Int、Long、Char 这类基础类型的区间
in判断做了编译期优化,最终生成的字节码和手动写两次不等号判断完全一致,没有任何额外的对象创建、遍历开销。 - 只有当你对区间执行迭代操作(比如 for 循环遍历区间、调用
map/filter这类集合操作符)时,才会真的遍历区间内的元素,单纯的存在性判断不会触发迭代逻辑。
自行验证方式
你可以通过 IDE 自带的工具直接验证优化效果:
- 在 IntelliJ IDEA 中打开对应 Kotlin 文件,选择顶部菜单
Tools -> Kotlin -> Show Kotlin Bytecode - 点击字节码面板的「Decompile」按钮,就能看到
x in 1..100000最终会被转换为两次数值比较加逻辑与的操作,和手写不等号判断的逻辑完全相同。
你给出的示例代码:
val x = 50000 if (x in 1..100000) { println(x) }
反编译后等效的 Java 代码如下:
int x = 50000; if (x >= 1 && x <= 100000) { System.out.println(x); }
内容的提问来源于stack exchange,提问作者Jimmy Choi
相关产品推荐
相关产品推荐

