先看源码:
下面开始自我的废话
上面的compareTo我没弄明白它是用地址大小做对比还是转为AC码作为比较得出正负值的,我水平还没够,也找不到答案,所以期待某天可以翻到这个的答案。 翻看源码,这个compareTo是Comparable接口的实现方法,Kotlin中有六个类都实现了这个接口:Duration、KotlinVersion、UByte、UInt、ULong、UShort。所以可以直接通过compareTo获取到时间比较、kotlin版本比较、数字比较的结果。 其实我也不太看得懂这个String类,因为我看不到String类中实现了接口方法的实现代码在哪里。所以我只能看到可以使用的方法,我不知道它的实现过程,这点java中就可以直接通过看源码看到它是怎么实现的,可能我查看kotlin的源码看错了,或许它在源码中有实现的代码,但是我看不懂,没有发现真相的眼睛… 上面中含有override关键字的就是接口中要实现的方法,虽然没明白它没有{代码实现}这一部分,但不妨碍我见名知意,知道它们是做什么的。 上面还有个比较难懂的关键字operator,我去百度搜了它,我明白了它的意思,我也想记录下来的,但是我明白了它的意思,但我按照不了自己的想法去写下来,所以记一下别人的笔记吧:运算符重载operator
还有个难明白的地方就是为啥要写companion object {}这一句?我明白这是相当于静态对象方法,但是里面也没有要写的静态的方法或者静态变量,所以这一句的意义是什么,我去百度了也没有百度到,也是一个未解之迷,希望以后写多看多了就明白了吧
operator fun plus(other: Any?): String 把两个字符串连接起来获得一个新的字符串
operator:重载方法 plus(other: Any?):plus函数就代表+,所以str.plus(other)可以直接写成我们非常熟悉的str+other
var str1="hello" var str2="world" //str1.plus(str2)和str1+str2的结果都是 helloworld,它们两是等价的 println(str1.plus(str2)) println(str1+str2)override val length: Int 获取字符串的长度
override:重写父类CharSequence接口中的方法或变量 val:只读变量
var str1="hello" var strLen = str1.length println(strLen) // 结果为5override fun get(index: Int): Char 返回字符串中index位置上的字符 index的位置超出了字符串长度则 抛出 StringIndexOutOfBoundsException异常
也是CharSequence接口中的方法
var str1="hello" var strGetChar = str1.get(3) println(strGetChar) // 结果为loverride fun subSequence(startIndex: Int, endIndex: Int): CharSequence 返回字符串中从[startIndex,endIndex)位置截取到的新字符串
也是CharSequence接口中的方法
var str1="hello" var subSequence = str1.subSequence(1, 3) println(subSequence) //结果为eloverride fun compareTo(other: String): Int 字符串比较,值相等返回0,如果字符串比other字符串小就返回负数,比other字符串大就返回正数
Comparable接口的方法
var str1="hello" var str2="world" var compareTo = str1.compareTo(str2) println(compareTo) // 不相等,结果为-15 var str3="hello" var compareTo1 = str1.compareTo(str3) println(compareTo1)//相等,结果为0在类中只有上面的这些方法,我还得找找其他的字符方法