Kotlin是否保证范围检查不会实例化范围?

时间:2018-03-19 16:50:28

标签: android kotlin

在我的Android应用中,我写了

return x >= rangeStart && x <= rangeEnd

IntelliJ有一项检查,希望我将其更改为

return x in rangeStart..rangeEnd

但是,由于此代码位于高容量事件处理的关键路径上,因此只有在我确定第二种形式不会创建任何垃圾的情况下才能接受转换。 Kotlin有这样的保证吗?

2 个答案:

答案 0 :(得分:4)

您可以通过搜索操作并输入“显示Kotlin字节码”或通过工具菜单 - >输入来检查Kotlin编译器自己生成的字节码。 Kotlin - &gt;显示Kotlin Bytecode。

对基元(Int,Double等)进行优化范围检查是一件非常简单的事情,因此您会发现Kotlin编译器始终会使用这些类型对您进行优化。如果您的关键代码路径中只有其中一些,您可以手动检查它是否安全使用范围。

documentation对此很简短,但确实说:

  

为任何类似的类型定义了范围,但对于整数基元类型,它具有优化的实现。

答案 1 :(得分:1)

来自here

的示例
if (i in 1..10) { // equivalent of 1 <= i && i <= 10
    println(i)
}

我认为它的语言&#34; Sugar&#34;而且它等于!