1:String、StringBuild、StringBuffer三者的区别
相同点:都是用来操作字符串的;
不同点:
a:string是不可变的,即a=1;a=a+1;此时a新建了;string是final类,不能被继承;
常用方法:length()长度、charAt(int)得到指定下标值、indexOf(String)指定内容第一次出现的下标、lastIndexOf(String)指定内容最后一次出现的下标、subString(begin,end)
b:stringbuild是线程不安全,用于需要对字符串大量操作的情况;
append、indexof、delete、
c:stringbuffer是线程安全的。
public synchronized StringBuffer append(char[] str, int offset, int len) {
super.append(str, offset, len);
return this;
}
d:执行速度:string要比stringbuild和stringbuffer慢,因为string对象是不可以变的。
String说明:String 对象的hashCode() 值,是根据String 对象的内容计算的,并不是根据对象的地址计算。下面是String 类源码中的hashCode() 方法:String 对象底层是一个final 修饰的char 类型的数组
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}