日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

StringBuffer 和 StringBuilder

作者:南瓜骨頭 更新時間: 2023-11-26 編程語言

String為什么是不可變的?

String類中有一個byte[]數組,這個byte[]數組采用了final修飾,因為數組一旦創建長度不可變。并且被final修飾的引用一旦指向某個對象之后,不可再指向其它對象,所以string是不可變的!

StringBuilder / StringBuffer為什么是可變的呢?

StringBuffer/StringBuilder內都實際上是一個byte[]數組,這個byte[]數組沒有被final修飾,StringBuffer/StringBuilder的初始化容量是16,當存滿之后會進行擴容,底層調用了數組拷貝的方法System.arraycopy(),所以StringBuilder / StringBuffer適合于使用字符串的頻繁拼接操作。

StringBuffer 和 StringBuilder

StringBuffer

  • 在實際的開發中,如果需要進行字符串的頻繁拼接,會有什么問題?
    因為java中的字符串是不可變的,每一次拼接都會產生新字符串。這樣會占用大量的方法區內存。造成內存空間的浪費。
String s = "abc";
s += "hello";
就以上兩行代碼,就導致在方法區字符串常量池當中創建了3個對象:
"abc"
"hello"
"abchello"
  • 如果以后需要進行大量字符串的拼接操作,建議使用JDK中自帶的:
    java.lang.StringBuffer
    java.lang.StringBuilder

如何優化StringBuffer的性能?
在創建StringBuffer的時候盡可能給定一個初始化容量。
最好減少底層數組的擴容次數。預估計一下,給一個大一些初始化容量。
關鍵點:給一個合適的初始化容量。可以提高程序的執行效率。

//創建一個初始化容量為16個byte[]數組。(字符串緩沖區對象)
StringBuffer stringBuffer = new StringBuffer();

//拼接字符串,以后拼接字符串統一調用append()方法。
//append是追加的意思。
stringBuffer.append("a");
stringBuffer.append("b");
stringBuffer.append("d");
stringBuffer.append(3.14);
stringBuffer.append(true);
// append方法底層在進行追加的時候,如果byte數組滿了,會自動擴容。
stringBuffer.append(100L);
System.out.println(stringBuffer.toString());//abd3.14true

//指定初始化容量的StringBuffer對象(字符串緩沖區對象)
//給的容量合適就行,多了也占地方
StringBuffer sb = new StringBuffer(capacity: 100);
sb.append("hello");
sb.append("world");
sb.append("hello");
sb.append("hello");
System.out.println(sb);//helloworldhellohello

StringBuilder

//使用StringBuilder也是可以完成字符串的拼接。
StringBuilder sb = new StringBuilder();
sb.append(100);
sb.append(true);
sb.append("hello");
sb.append("kitty");
System.out.println(sb);//100truehellokitty

區別

  1. StringBuffer中的方法:有synchronized(就這么念:星口奈斯特)關鍵字修飾。表示StringBuffer在多線程環境下運行是安全的。
  2. StringBuilder中的方法:沒有synchronized關鍵字修飾,表示stringBuilder在多線程環境下運行是不安全的。
  3. StringBuffer是線程安全的。StringBuilder是非線程安全的。

原文鏈接:https://blog.csdn.net/weixin_47957908/article/details/130021602

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新