區別:
String內容不可變,StringBuffer和StringBuilder內容可變;
StringBuilder非線程安全(單線程使用),String與StringBuffer線程安全(多線程使用);
如果程序不是多線程的,那么使用StringBuilder效率高於StringBuffer。
(2)String 字符串常量;
這句話總結歸納了String的兩個最重要的特點:
String是值不可變的常量,是線程安全的(can be shared)。
String類使用了final修飾符,String類是不可繼承的。
(3)StringBuffer字符串變量(線程安全)是一個容器,最終會通過toString方法變成字符串;
(4)StringBuilder 字符串變量(非線程安全)。
(1) String在修改時不會改變對象自身
在每次對 String 類型進行改變的時候其實都等同於生成了一個新的 String 對象,然后將指針指向新的 String 對象,所以經常改變內容的字符串最好不要用 String 。
(2) StringBuffer在修改時會改變對象自身
每次結果都會對 StringBuffer 對象本身進行操作,而不是生成新的對象,再改變對象引用。所以在一般情況下我們推薦使用 StringBuffer ,特別是字符串對象經常改變的情況下。StringBuffer 上的主要操作是 append 和 insert 方法。
使用場景:
(1)如果要操作少量的數據用 String;
(2)多線程操作字符串緩沖區下操作大量數據 StringBuffer;
(3)單線程操作字符串緩沖區下操作大量數據 StringBuilder。