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线程不安全。

posted @ 2017-01-22 20:25  浮尘~若梦  阅读(166)  评论(0)    收藏  举报