- final类,说明不可修改,因为java采用了反射机制,所以加载核心类不能出错,用final更安全
- 实现接口 java.io.serailizalbe charSequence字符序列,主要方法包括charAt(),length()等, comparable比较器 serializable只是一个标识,没有任何定义也没有任何实现方法http://www.aichengxu.com/article/Java/24680_2.html
- 成员:字符数组char[],hash值,serialVersionUID,ObjectStreamField(用来描述序列化对象的字段)
- 构造方法多个构造方法,如String,字符数组,StringBuffer,Stringbuilder,都是调用Arraycopy的方法,用codePoints构造,codePoint是Unicode中的码位,因为Unicode的部分字符java的一个char无法表示,需要用到2个char,所以遍历codePoint数组(int类型),如果是>0x10000,就长度++,最后转成char数组;其他构造还包括byte数组(需要指定特定字符集,否则报错),会调用Stringcode的decode方法,先采用本机默认字符集,其次是ISO-8859-1编码,即latin-1编码
- 接着是字符串的一些常用方法,包括长度,截取,以及编码的转换,如String转byte,
- String重写了equals方法,先判断1引用是否相等2是否字符串instanceof3长度是否相等4逐个比较字符,但是实现方式有点奇怪: int i=0;
while(n--!=0){if(v1[i]!=v2[i])return false;}return true;显然它循环时候操作了两个变量,为什么不用一个?其它的也是
- 与StringBuffer和StringBuilder的对比,从这里看出两者线程安全不同
- ignoreCase的比较会将字母都转化为大写字母,但是由于德国字母表有问题,所以得转成小写字母再比一次
- 字符串寻找匹配:
- hashCode关键代码:h = 31 * h + val[i]
- subString,concat就很简单了,直接构造,
- 为了增强String的功能,String带有一些正则匹配功能,都是调用java的regex包
- split功能很有趣,先看javadoc给出的例子:
"boo:and:foo"
Regex Limit Result : 2 { "boo", "and:foo"
}: 5 { "boo", "and", "foo"
}: -2 { "boo", "and", "foo"
}o 5 { "b", "", ":and:f", "", ""
}o -2 { "b", "", ":and:f", "", ""
}o 0 { "b", "", ":and:f"
}
When there is a positive-width match at the beginning of this string then an empty leading substring is included at the beginning of the resulting array. A zero-width match at the beginning however never produces such empty leading substring.
If
n
is non-positive then the pattern will be applied as many times as possible and the array can have any length.
If
n
is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded.
总结而已,结尾的空串会被抛弃(如果limit是0),否则都会包括。匹配后会有一个空串在切割的子串前面
1首先判断regex是否是一个普通字符或转义字符,是就快速匹配
2建立ArrayList<String>,通过不断indexOf来匹配,并且substring
3如果limit为0,就将list的结尾的空串删去
14.String的join函数调用String Stringjoiner,Stringjoiner在java.util包
通过StringBuilder调用add加上分隔符和newElement
15.tolowerCase,toUpperCase
16.trim 去除两边的空格,采用先遍历两边的空格,记录位置,再调用substring
17格式化,构造formatter
18valueOf,将char等各种数据类型转化成String类型