filename:String.kt/StringsJVM.kt/Arrays.kt/CharSequence.kt
讲完基础数据类型之后,这一篇就看一下String字符串,其实字符串也是每个言语里最基本的数据类型,但是为什么没有把字符串放到基础数据类型呢,是因为字符串是比基础类型更复杂,有更多的内容,所以单独一篇来说一下字符串类型。
先上一张String.kt的图。
刚看到String.kt源码的时候,不知道小伙伴是否和我一样,String是有很多操作方法的,光构造函数就不止这5个方法,但是Kotlin把为什么没有“定义”那些方法呢,比如replace/indexOf等等,是不是有点奇怪?
抱着这个问题,我动手写了一些demo。
如图,在String.kt没有定义的方法,byteInputStream和replace是怎么被调用的呢?
可以点击查看replace源码实现:
我们可以看到跳转到了StringsJVM.kt了,在这个文件里,通过Kotlin的语法糖——方法扩展,定义了replace,且用actual,指定Kotlin的String.replace是Java的String.replace的别名函数。再看一个更直观的例子。
这里的意思,就是说Kotlin的String.nativeIndexOf是直接调用Java的String.indexOf(Kotlin与Java 100%兼容)。
如果把StringsJVM.kt这个文件,浏览一遍,我们会发现Kotlin的String里的方法,大部分都是直接调用Java的String里的方法,从这里看到Kotlin复用了很多Java的api。
说到这里,大家应该明白了,Kotlin的String方法是通过方法扩展的方式,散落在不同的kt文件里,且大部分是复用Java逻辑的。
我们接着看和String相关的其他源码文件。
CharSequence.kt文件
CharSequence类是String的接口类,在kotlin包中。
从源码看,这个接口简单定义了可读String的基本行为,length/get/subSequence。
同样,我们知道JVM上CharSequence的行为,也不止这三个,我这里找到其他的扩展函数,看官可以自行阅读。
再看一下Arrays.kt
这个Kotlin文件,定义封装了JVM中byte[],char[],int[]等“低级”行为,其中CharArray就是代表了JVM中char[]。源码如下,很简单,我就不做过多解读。
Kotlin与Java一样,同为JVM上的语言,讲完String,这个不可变的字符串,还需要再介绍些StringBuiler可变的字符串。
上源码截图:
看到这张截图,是不是更简单粗暴了?直接整个类都是java.lang.StringBuilder的别名,Kotlin真是太机智了。详情请参照java.lang.StringBuilder。
至此Kotlin的字符串源码分析,就完结了,如有哪里有纰漏的,欢迎评论,一起学习。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有