关于String类、StringBuilder和StringBuffer
-
首先String类不是一个基本类型,它是一个引用类型。并且String类型是不可变的,每次我们对它进行修改时,都会创建一个新的String对象,然后将新的值放入新对象
-
String类的compareTo方法返回的是两个字符串的ASCII码的差值,即两字符串从头开始比,如果第一个就不等则直接返回差值,否则继续
-
StringBuffer类型是线程安全的,而StringBuilder类型不是线程安全的,具体表现为StringBuffer中的方法都加入了sychronized的修饰,而StringBuilder则没有进行修饰
-
在转换为字符串时,StringBuffer使用的是toStringCache字符数组得到新的字符串,StringBuilder返回的是char[] value数组进行复制得到的
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
//StringBuilder返回字符串
public String(char value[], int offset, int count) {
if (offset < 0) {
throw new StringIndexOutOfBoundsException(offset);
}
if (count <= 0) {
if (count < 0) {
throw new StringIndexOutOfBoundsException(count);
}
if (offset <= value.length) {
this.value = "".value;
return;
}
}
// Note: offset or count might be near -1>>>1.
if (offset > value.length - count) {
throw new StringIndexOutOfBoundsException(offset + count);
}
this.value = Arrays.copyOfRange(value, offset, offset+count);
}
//使用了copy函数
public synchronized String toString() {
if (toStringCache == null) {
toStringCache = Arrays.copyOfRange(value, 0, count);
}
return new String(toStringCache, true);
}
//StringBuffer转换为String