String 其实就是字符数组
CharSequence 这个接口是一个只读的字符序列。包括length(), charAt(int index), subSequence(int start, int end)这几个API接口
implements java.io.Serializable, Comparable<String>, CharSequence
value[]是存储String的内容的
private final char value[]
而hash是String实例化的hashcode的一个缓存。因为String经常被用于比较,比如在HashMap中。如果每次进行比较都重新计算hashcode的值比较麻烦,而保存一个hashcode的缓存无疑能优化这样的操作。
private int hash;
初始化方法 1
String支持多种初始化方法,包括接收String,char[],byte[],StringBuffer等多种参数类型的初始化方法。但本质上,其实就是将接收到的参数传递给全局变量value[]。
public String() { this.value = "".value; }
初始化方法 2
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
初始化方法 3
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
}
初始化方法 4
初始化方法 5
checkBounds方法判断offset、length是否小于0,以及offset+length是否大于bytes.length
通过操作字节数组来实现对字符串对象的构建
首先保证charsetName不为null,然后调用checkBounds方法判断offset、length是否小于0,以及offset+length是否大于bytes.length。然后调用一个核心的方法用于将字节数组按照指定的编码方式解析成char数组
通过操作字节数组来实现对字符串对象的构建
使用StringBuffer 初始化
使用StringBuilder初始化
返回长度
是否为空
返回字符串中某字符
返回指定索引处的字符
判断字符串相等
最大的差别就是String的equals方法只有在另一个对象是String的情况下才可能返回true,
而contentEquals只要求另一个对象是CharSequence或其子类的对象
compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序),
如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值。
大小写不敏感比较方法
当某个字符串调用该方法时,表示从当前字符串的firstStart位置开始,取一个长度为len的子串;然后从另一个字符串other的otherStart位置开始也取一个长度为len的子串,然后比较这两个子串是否相同,如果这两个子串相同则返回true,否则返回false。
这个方法有两个变体并测试如果一个字符串开头的指定索引指定的前缀或在默认情况下从字符串开始位置
String类中的hashCode计算方法还是比较简单的,就是以31为权,每一位为字符的ASCII值进行运算,用自然溢出来等效取模。
哈希计算公式可以计为s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
参考https://www.cnblogs.com/micrari/p/5626202.html
返回字符中indexof(string)中字串string在父串中首次出现的位置,从0开始,没有返回-1。
(1)String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串
(2)String.valueOf(char c) : 将 char 变量 c 转换成字符串
(3)String.valueOf(char[] data) : 将 char 数组 data 转换成字符串
(4)String.valueOf(char[] data, int offset, int count) : 将 char 数组 data 中 由 data[offset] 开始取 count 个元素 转换成字符串