String、StringBuffer、StringBuilder源碼解析

String:若是短字符拼接的話效率是最高的,例如 String a="a"+"b"+"c";編譯器會翻譯成String a ="abc"數組

可是若是是String a = "a";安全

String b = "b";app

String c = "c";ui

String d = a + b +c;的話不如StringBuffer,由於底層實現就是建立StringBuffer來進行append.spa

String是不可變得,緣由在於 private final char value[]; 初始化是final.線程

StringBuffer是線程安全的,緣由在於其append方法,delete方法、replace方法等都是由synchronized修飾.翻譯

StringBuilder並無synchronized修飾方法,因此是線程不安全的.繼承

另外StringBuffer、StringBuilder初始化爲16長度編譯器

super(16);編譯

擴容是2倍原長度+2

append方法,delete方法、replace方法等對字符變化最終都調用Ssytem.arraycopy(源數組,源數組起始位置,目的數組,目的數組起始位置,複製長度)

subString和String沒區別,由於最後是new String(源數組, 起始位置, 截取長度)

 

最後,StringBuffer和StringBuilder繼承AbstractStringBuilder,並不是繼承String

相關文章
相關標籤/搜索