阅读java源码--String
本文章源码来源JDK1.8
目录
compareTo(String anotherString)
compareToIgnoreCase(String str)
replace(char oldChar, char newChar)
-
实现方式
- char数组
- char数组
-
构造方法
-
空构造 "".value
-
String 为参数
-
char[] 为参数
- 其中char[]有带偏移量的方法
- 其中char[]有带偏移量的方法
-
字符的UNicode编码数组(int[])
-
byte[] 不常用
-
StringBuffer为参数
-
StringBuilder为参数
- 此两种方式常常被忽视,但是实际存在
-
内部构造
- 此方法只在String内部使用,提高复制数组效率,直接赋值
-
-
主要方法
-
length()
- 返回char数组的长度
- 返回char数组的长度
-
isEmpty()
- 返回char数组是否为空
- 返回char数组是否为空
-
charAt(int index)
- 判断index是否合法,合法则返回char数组索引所在位置(value[index])
-
equals(Object anObject) !!!
- 判断是否同一对象,是则返回true
- 如果对象不属于String类型直接返回false(instanceof)
- 遍历两个字符串的char数组,如发现字符串不相等时,返回false
- ps:非常重要的方法,不仅是对代码思路有所帮助,同时也是面试重点
-
compareTo(String anotherString)
- 选择两个字符串中长度较短的为限制,遍历
- 如果有字符不相等,就返回差值
- 遍历完成未返回,返回两个字符串的长度之差
-
compareToIgnoreCase(String str)
- 同5,忽略大小写后字符串比较
-
hashCode()
- 有缓存机制,只计算一次
- 字符串的每一个字符参与计算,公式为s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
-
indexOf
- 返回该字符第一次出现的索引(从0开始计数) ps:该参数为字符的整数值
- 该参数可为String
-
lastIndexOf(int ch)
- 返回该字符最后一次出现的索引,同8
-
substring
- 截取字符串,如果截取的长度等符合规则,则调用char[]为参数的构造函数创建新的对象
- 截取字符串,如果截取的长度等符合规则,则调用char[]为参数的构造函数创建新的对象
-
concat(String str)
- 将新串接到末尾,如果是空串则返回本身,否则创建新字符串
- 将新串接到末尾,如果是空串则返回本身,否则创建新字符串
-
replace(char oldChar, char newChar)
- 替换原字符串中所有的oldChar变为newChar,相等时不操作
- 找到第一次出现oldChar的位置i
- 新建一个新char数组, 将i前所有字符copy进新数组,i后字符如果是old则替换成new,之后生成新字符串
-
contains
- 调用方法indexOf判断是否在字符串中
- 调用方法indexOf判断是否在字符串中
-
split(String regex)
- 将字符串分割返回字符串数组
-
join
- 一个静态方法,将字符串数组转成字符串
-
toUpper/toLower
- 转化大小写
-
trim()
- 去除字符串两端空格
- 两个指针,从字符串两端逼近,如果指针所在位置为空格则移动指针
- 根据两个指针的位置生成字符串
-
toCharArray()
- 返回字符数组
-
valueOf
- 参数为对象或者char[]或者基本数据类型
- 对象时 空对象返回“null” ,否则返回对象的toString方法,此处一定注意空对象变成“null”而不是“”或者null
- char[]调用char[]的构造函数
- 基本型返回对应封装类的toString
-