java基础面试题 String,Stringbuffer,Stringbuilder三者的区别

1 String

String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的

查看它的源码

 public String() {
        this.value = "".value;
    }

变量value

   private final char value[];

被final修饰的类不能有子类,被final修饰的变量只能在构造函数中进行一次赋值,当然这个包含局部变量和成员变量

2 StringBuffer

StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用StringBuffer,如果想转成String类型,可以调用StringBuffer的toString()方法 看下它的appent()方法

  @Override
    public synchronized StringBuffer append(String str) {
        toStringCache = null;
        super.append(str);
        return this;
    }

它是被synchronized修饰的,所以它多线程环境下是安全的

3 StringBuilder

StringBuilder:字符串变量(非线程安全)。在内部,StringBuilder对象被当作是一个包含字符序列的变长数组

也看下它的appent()方法

 @Override
    public StringBuilder append(String str) {
        super.append(str);
        return this;
    }

从这二个方法中就可以看到的出来StringBuffer和StringBuilder的区别,

所以在单线程中使用StringBuffer 在多线程环境下使用StringBuilder

你可能感兴趣的:(java逻辑题)