String源码解析,基于java8
CharSequence:
charSequence是一个接口,表示char值的一个可读序列,
是一个描述字符串结构的接口,在这个接口里一般有三种常用的子类
: String类 , StringBuffer类 , StringBuilder类
compareTo:按字典顺序比较
源码如下:
compareToIgnoreCase:按字典顺序比较,忽略大小写
底层实现就是比compareTo多了个忽略大小写的操作
源码如下:
忽略大小写的操作咱们就不要看了,如果有需要大家可以自己去调试看看
hashCode的计算方式 如下图:
substring:
查看源码:在substring方法中调用了string的构造方法
在string的构造方法中调用了Arrays.copyOfRange(参数1 数组,参数2 start位置,参数3 数组长度),
在copyOfRange中调用了System.arraycopy(src 原数组,srcPos 原数组的起始位置,dest 目标数组,destPos 目标数组起始位置,length 复制的长度)
replace:
查看源码:实现步骤如下
如果新字符与旧字符相同直接返回this,
之后去循环找到旧字符的位置并保存到i,
创建一个新的数组,数组长度和原数组一样,
遍历小于i的长度,循环将相同的字符添加到新数组,<!-- 这一步非常妙,节省了很多不必要的判断,优化代码执行效率 -->
这时候就找到了要替换的字符位置,
这里使用了三元运算符,如果该位置的字符等于旧字符,就替换为新字符
buf[i] = (c == oldChar) ? newChar : c; <!-- 特别棒 -->
matches:
public boolean matches(String regex) { <!-- 参数regex为正则表达式 -->
return Pattern.matches(regex, this);
}
这个方法是返回是否匹配指定的字符串,
split:
很多方法都是和split一样,会用很多重载的方法,而最终执行逻辑的方法就一个,
只是给参数赋初始值
CharSequence:
描述字符串结构
Join:
我们先来试一下Join方法怎么使用
得到的结果是
那我们来进入源码看一下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
调用了StringJoiner的add方法我们进去看一下:
这里的返回类型是StringBuilder,调用父类AbstractStringBuilder的append方法,
然后一步步返回到add方法,
这时候我们得到的字符数组是join-
接下来执行append(newElement方法),将String添加进去,
同样是调用父类AbstractStringBuilder的append方法,
这里都是append的重载,这里看图四,得到结果之后一步步返回到add,
当得到全部数据之后调用toString,将数组转换为字符串返回
toLowerCase
Locale.getDefault() 获取当前的语言环境
将字母转成小写,源码表示看着有点困难就么有看,
也没有找到相关的博客
trim
去除头尾的空格
t() 获取当前的语言环境
将字母转成小写,源码表示看着有点困难就么有看,
也没有找到相关的博客
trim
去除头尾的空格