gpt4 book ai didi

string - Kotlin:有一个用于子字符串的类吗?

转载 作者:行者123 更新时间:2023-12-02 13:17:31 25 4
gpt4 key购买 nike

有一个将字符串作为输入的递归函数。它将字符串分成多个部分,并为每个部分调用自身。此函数不更改输入字符串,仅读取它。该功能在Kotlin中实现。
要创建子字符串,该子字符串函数称为:

    myFunc(str.substring(begin, length))
对这种实施的有效性存在疑问。尽管每次调用都会创建一个新字符串,但足以在原始字符串中传递子字符串的开头和长度。
Kotlin是否有一个用于子字符串的类?例如,在C++标准库中,有一个类 std :: string_view,而在Qt中有一个类 QStringRef。 Kotlin有类似的东西吗?
也许String类已经优化,并且substring函数没有分配新的内存,并且新实例使用与原始内存相同的缓冲区?

最佳答案

您可以自己查看源代码以进行检查。
在java.lang.String(由Kotlin / JVM使用)的情况下,在Java 7之前非常简单:字符串具有对字符数组的引用以及开始和结束索引。因此,尽管子字符串必须是新的String实例,但它引用的字符串与生成该字符串的字符串相同。换句话说,它优化了子字符串的大小写。
但是,String类现在更加复杂,并且现在似乎针对堆使用进行了更多优化:请参见this question
如果您真的担心此特定方法的性能,则可以完全省去创建对象,并传入原始String以及您自己的起始值和结束值。但是,通常会使用有关优化的一般规则:只有在热点中,这样的代码才值得复杂化,并且您需要做一些测试来证明它是否有效以及重写是否确实可以改善性能。

关于string - Kotlin:有一个用于子字符串的类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62526413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com