You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中Extension Function与Infix Functions是否存在性能差异?

Kotlin扩展函数与中缀函数的性能差异

结论先行:两者不存在本质的性能差异——中缀函数只是一种语法糖,它和扩展函数不是同一维度的概念,甚至中缀函数本身就可以是扩展函数。

  • 中缀函数是调用方式的语法糖
    中缀函数的核心是允许你用空格代替.和括号来调用函数,它本身不改变函数的底层实现。只要函数满足两个条件:是成员函数或扩展函数,且只有一个参数,就能用infix修饰符变成中缀函数。比如:

    // 扩展函数+中缀语法
    infix fun Int.multiplyBy(num: Int) = this * num
    // 两种调用方式等价
    println(5.multiplyBy(3)) // 普通调用
    println(5 multiplyBy 3)  // 中缀调用
    

    这两种调用编译后对应的字节码完全一样,没有额外的性能开销。

  • 扩展函数的底层实现
    Kotlin的扩展函数编译后会被转为静态方法,把原类型的实例作为第一个参数传入。比如上面的multiplyBy编译成Java等价代码是这样的:

    public static int multiplyBy(int $this$multiplyBy, int num) {
        return $this$multiplyBy * num;
    }
    

    不管你用普通.调用还是中缀空格调用,最终都是执行这个静态方法,性能上没有区别。

  • 性能差异只来自实现逻辑
    如果你觉得某个中缀函数和扩展函数运行速度不同,那一定是它们的函数体逻辑不一样,和“中缀”或“扩展”的语法形式无关。比如一个中缀函数内部做了循环计算,另一个扩展函数只是简单返回值,这种差异是实现导致的,不是语法本身的性能损耗。

内容的提问来源于stack exchange,提问作者Mert Ozan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:22:05