String
- java.lang.String类中并没有修改字符串内容的方法,是immutable类(不可变类)。也就是说,String实例所表示的字符串绝对不会发生变化。也就无需声明sychronized。
- 字符串和实例表达式通过运算符“+”连接时,程序会自动调用实例表达式的toString()方法。(Java规范)
StringBuffer(线程安全)
- StringBuffer表示的字符串能够随意改写,是mutable类(可变类)。改写时需要妥善使用synchronized。所以StringBuffer的方法中都要加锁。
- String的引用的速度快,而频繁修改字符串内容StringBuffer的速度快。
StringBuilder(非线程安全)
- 速度 : StringBuilder > StringBuffer
String中equals的实现
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}