String,StringBuilder,StringBuffer,StringJoiner
java標準庫提供了String,StringBuilder,StringBuffer,StringJoiner三個類
String類是不可變的對象,而其他三個類是可變的對象
首先,由于在String類中的定義存儲字符串的char[]數組,它被final關鍵字修飾,所以說String類是不可變的
而其他三個字符串類中char[]數組都沒有被定義為final.
其次,String類正因為不可變所以無法預分配緩沖區,只能根據最終結果來分配。而其他三類都已經預分配了緩沖區。
內存空間為16+字符串的長度
接著,String類在新增字符時,會創建新的臨時對象。而其他三類正是因為可變的特性,所以可以直接修改char[]數組
所以不會創建新的臨時對象來存值。
StringBuilder ,StringBuffer,StringJoiner ,三個類都繼承自AbstractStringBuilder,實現的接口也一致。
StringBuilder的線程安全較差,但它的性能優越。而StringBuffer的性能較低,但它的線程安全較高,它的方法被
synchronized關鍵字修飾,所以較為安全。但現在很少使用到StringBuffer類,更多使用的是StringBuilder。
StringBuilder支持鏈式操作
StringJoiner類是一個可以高效拼接字符串的類。
// 代碼實例
StringBuilder sbx = new StringBuilder(1024);
?? ?for (int i = 0; i < 1000; i++) {
?? ??? ? sb.append(',');
?? ??? ? ?sb.append(i);
?? ?}
?? ?String s = sb.toString();
?? ?System.out.println(s);
StringBuilder鏈式操作
StringBuilder sb = new StringBuilder(1024);
sb.append("Mr ")
? .append("Bob")
? .append("!")
? .insert(0, "Hello, ");
System.out.println(sb.toString());
// StringBuilder與String類中不同的 方法
StringBuilder ?sb = new StringBuilder
sb.append(b);// 在sb字符串的后邊拼接一個字符串。
sb.charAt(index);// 輸出字符串sb下標為index的值
sb.delete(start, end);// 刪除字符串從start開始,從end結束不包含end
sb.indexOf(str);// 查找字符串str在sb字符串中的位置,返回下標值
sb.reverse();// 將字符串逆序
sb.replace(start, end, str); // 替換字符串中的值,從start開始在end結束不包含end,替換為str
?
總結
以上是生活随笔為你收集整理的String,StringBuilder,StringBuffer,StringJoiner的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022年1月17日
- 下一篇: 微信开发之移动手机WEB页面(HTML5