java面试常见问题——string,stringBuffer,stringBuilder
1.看string源码:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
public String() {
this.value = new char[0];
}
由以上源码可以看出:string使用字符数组保存字符串,由于其修饰符为final,故而其字符串对象是不可变的。
2.看StringBuffer源码:
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
{
public StringBuffer() {
super(16);
}
abstract class AbstractStringBuilder implements Appendable, CharSequence {
char[] value;
/**
* Creates an AbstractStringBuilder of the specified capacity.
*/
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
}
由以上源码可以看出:StringBuffer继承于AbstractStringBuilder ,StringBuffer构造函数首先会调用了父类的构造函数,在看AbstractStringBuilder,其构造函数构造一个字符数组对象,但未有final修饰,故而其对象可变。
3.看StringBuilder源码:
public synchronized StringBuffer reverse() {
super.reverse(); return this;
}
public StringBuilder reverse() {
super.reverse();
return this;
}
可以看出stringBuffer加了同步,StringBuilder并未加,由此可以看出StringBuffer线程安全,StringBuilder线程不安全。

浙公网安备 33010602011771号