写博客(测试)


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

相关文章
相关标签/搜索