寫博客(測試)


title: SpringSecurity認知
date: 2021-04-06 17:36:04
tags: 面試題java


Java基礎

String、StringBuffer、StringBuilder的區別?

從 線程安全、執行效率、存儲空間、使用場景來講明
  1. 從線程安全性來講:String 、StringBuffer 是線程安全的,StringBuilder 是非線程安全的。
  2. 從執行效率來講:StringBuilder > StringBuffer > String。
  3. 從存儲空間來講:String 的值是不可變的,每次對 String 的操做都會生成新的 String 對象,效率低耗費大量內存空間,從而引發GC。StringBuffer 和 StringBuilde r都是可變的。
  4. 從使用場景來講明:①若是要操做少許的數據用 String ;②單線程操做字符串緩衝區 下操做大量數據用 StringBuilder③多線程操做字符串緩衝區下操做大量數據用 StringBuffer。

源碼以下面試

//String
public 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;
    }
 }

--StringBuilder
public 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;
    }
}

--AbstractStringBuilder
abstract class AbstractStringBuilder implements Appendable, CharSequence {
    char[] value; //默認字符數組
    public AbstractStringBuilder append(Object obj) {
        return append(String.valueOf(obj));
    }
}

講述HashMap的源碼

image-20210414085301900

相關文章
相關標籤/搜索