String
使用 String 聲明一個字符串的時候,該字符串會存放在堆中的字符串常量池中。因為在java中所有的String 都是以常量表示,且由 final 修飾,因此在線程池中它的線程是安全的 且 不可變的 。每個 String 在被創建后就不再發生任何變化。
我們在創建String的時候,它在常量池中對這些信息進行處理,如果程序中出現了大量字符串拼接、劃分等操作效率將非常低。
因此,使用場景是在少量字符串操作的時候才建議直接使用。
StringBuilder
StringBuilder 沒有考慮線程安全的問題。雖然執行效率高,但是不安全所以不建議在多線程環境下對同一個 StringBuilder 對象進行操作。
因此,StringBuilder 適用于單線程環境下的大量字符串操作。
StringBuffer
StringBuffer 相對于 StringBuilder 效率要低一些,但遠比 String 高。
比StringBuffer 效率低的原因:考慮到了多線程的情況,在進行字符串操作的時候 使用 synchronized 關鍵字對方法進行了同步處理。
因此,StringBuffer 適用于多線程環境下的大量字符串操作。