前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kotlin源码阅读——字符串

kotlin源码阅读——字符串

原创
作者头像
Runhwguo
修改2018-09-11 19:58:30
2.5K1
修改2018-09-11 19:58:30
举报

filename:String.kt/StringsJVM.kt/Arrays.kt/CharSequence.kt

讲完基础数据类型之后,这一篇就看一下String字符串,其实字符串也是每个言语里最基本的数据类型,但是为什么没有把字符串放到基础数据类型呢,是因为字符串是比基础类型更复杂,有更多的内容,所以单独一篇来说一下字符串类型。

先上一张String.kt的图。

String.kt源码
String.kt源码

刚看到String.kt源码的时候,不知道小伙伴是否和我一样,String是有很多操作方法的,光构造函数就不止这5个方法,但是Kotlin把为什么没有“定义”那些方法呢,比如replace/indexOf等等,是不是有点奇怪?

抱着这个问题,我动手写了一些demo。

Demo
Demo

如图,在String.kt没有定义的方法,byteInputStream和replace是怎么被调用的呢?

可以点击查看replace源码实现:

StringJVM.kt
StringJVM.kt

我们可以看到跳转到了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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档