当前位置: 首页 > 知识库问答 >
问题:

这个kotlin代码是如何工作的?

高峻
2023-03-14

Kotlin定义了自己的String类:

public class String : Comparable<String>, CharSequence {
    companion object {}        
    public operator fun plus(other: Any?): String    
    public override val length: Int    
    public override fun get(index: Int): Char    
    public override fun subSequence(startIndex: Int, endIndex: Int): CharSequence    
    public override fun compareTo(other: String): Int
}

该类的实例是通过stringsjvm.kt中定义的内联函数构造的:

public inline fun String(bytes: ByteArray, offset: Int, length: Int): String =
    java.lang.String(bytes, offset, length, Charsets.UTF_8) as String
    null

我认为在编译之前必须进行某种代码预处理。

请随意用一个更贴切的标题编辑这个问题。

共有1个答案

秋建义
2023-03-14

基本上,Kotlin.string是一个映射类型,这意味着当编译到JVM字节码中时,Kotlin.string类型的所有Kotlin用法都被转换为java.lang.string的等效用法。

这种技术确保了Kotlin和Java类型的兼容性,同时允许向Java类型添加Kotlin惯用API。

您可以检查编译器生成的*.class文件,看看它们是否提到了java.lang.String

关于Kotlin.string定义的length属性的编译,您可以看到它实际上从未编译过,而是根据相应模块的Gradle构建脚本将其序列化为Kotlin builtins元数据。

 类似资料:
  • 这是来自SQLZOO.NET的问题

  • 我试图了解mysql查询在GROUP BY和不使用GROUP BY的情况下是如何工作的。 假设我有一个FILM_ACTORS表,其中每个ACTOR_ID都有一个相应的film_id。于是同一个演员参演了N部不同的电影。 我想选出参与20部电影的演员: 这个查询起作用,并返回参与20部电影的actor_id。但如果我只是: 为什么该查询仅在我将其等于film_actor表(5463)的大小时才返回值

  • 我正在阅读《实用恶意软件分析》一书,其中出现了以下示例代码: 作者接着说: 返回的COM对象将存储在堆栈中IDA Pro标记为ppv的变量中,如图所示。 我的问题是,这是为什么?既然我们做了一个mov eax,[esp 24h ppv],这难道不是将[esp 24h ppv]内部的数据移动到eax并覆盖返回值,而不是将返回值存储在变量中吗?我认为在Intel格式中,mov操作数1、操作数2总是将第

  • Java字符串池与反射耦合在一起可以产生一些在Java中难以想象的结果: 以上代码将打印: 马里奥怎么了?

  • 我在一本书《做二进制搜索》中看到了这个方法,但无论我怎么尝试,我都无法理解它是如何工作的。有人能确切地向我解释一下它是如何工作的吗? 这本书的解释无助于: 这个想法是在我们靠近目标元素时跳跃并减慢速度。变量k和b包含数组中的位置和跳跃长度。如果数组包含元素x,搜索后x的位置将在变量k中。该算法的时间复杂度为O(log n),这是因为对每个跳转长度而言,同时循环中的代码最多执行两次。 我不明白的是k

  • 因此,我需要开始考虑关联,最好是利用我对并发工具的现有知识来加快进程。 我试着为他们跟踪Google codelab,虽然它给了我一点理解,但它也提出了许多未回答的问题,所以我试图通过编写一些代码、调试和查看日志输出来弄脏我的手。 根据我的理解,一个coroutine由两个主要构件组成;挂起函数是您执行工作的地方,而coroutine上下文是您执行挂起函数的地方,这样您就可以对coroutine将