title: SpringSecurity认知
date: 2021-04-06 17:36:04
tags: 面试题


Java根底

String、StringBuffer、StringBuilder的区别?

从 线程平安、执行效率、存储空间、应用场景来阐明
  1. 从线程安全性来说:String 、StringBuffer 是线程平安的,StringBuilder 是非线程平安的。
  2. 从执行效率来说:StringBuilder > StringBuffer > String。
  3. 从存储空间来说:String 的值是不可变的,每次对 String 的操作都会生成新的 String 对象,效率低消耗大量内存空间,从而引起GC。StringBuffer 和 StringBuilde r都是可变的。
  4. 从应用场景来阐明:①如果要操作大量的数据用 String ;②单线程操作字符串缓冲区 下操作大量数据用 StringBuilder③多线程操作字符串缓冲区下操作大量数据用 StringBuffer。

源码如下

//Stringpublic final class String    implements java.io.Serializable, Comparable<String>, CharSequence {    private final char value[]; //底层是字符数组,定长,final不可变}//StringBuffer public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence{     private transient char[] toStringCache;     public StringBuffer() { super(16);} //字符数组长度默认为16     public StringBuffer(int capacity) {super(capacity);}          public StringBuffer(String str) {         super(str.length() + 16);         append(str);     }          @Override    public synchronized StringBuffer append(String str) {        toStringCache = null;        super.append(str);        return this;    } }--StringBuilderpublic final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence{    public StringBuilder() {super(16);}  //字符数组长度默认为16    @Override    public StringBuilder append(String str) {        super.append(str);        return this;    }}--AbstractStringBuilderabstract class AbstractStringBuilder implements Appendable, CharSequence {    char[] value; //默认字符数组    public AbstractStringBuilder append(Object obj) {        return append(String.valueOf(obj));    }}

讲述HashMap的源码