日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 字符串拼接 StringBuilder() StringBuffer

發布時間:2024/1/17 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 字符串拼接 StringBuilder() StringBuffer 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
??
??

字符串拼接

普通方式

public class StringDemo2 {public static void main(String[] args) {// 表示獲取從1970-01-01 00:00:00到現在的毫秒值long begin = System.currentTimeMillis();// 拼接字符串家,將100000個a拼接在一起String str = "";for (int i = 0; i < 100000; i++) {str += "a";}long end = System.currentTimeMillis();System.out.println(end - begin);}}

運行結果:

2496

運行結果是程序運行的時間(ms),我們可以看到運行這個程序用了近2.5s。

程序解析:

這種字符串拼接方式是創建一個新的字符串,然后將原來的字符串和將要拼接的字面量拼接起來賦給新的字符串。

這個過程中會不斷創建新的新的字符串,所以回耗費大量時間,同時創建太多的新字符串會占用大量的內存,可能會導致方法區內存溢出。

如果是數據量較少的話可以使用該方法,數據量過多不建議使用。

StringBuilder(JDK5.0)

StringBuilder:字符串變量(非線程安全)。在內部,StringBuilder 對象被當作是一個包含字符序列的變長數組。

java.lang.StringBuilder 是一個可變的字符序列,是 JDK5.0 新增的。此類提供一個與 StringBuffer 兼容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字符串緩沖區被單個線程使用的時候(這種情況很普遍)。

其構造方法如下:

構造方法描述
StringBuilder()創建一個容量為16的StringBuilder對象(16個空元素)
StringBuilder(CharSequence cs)創建一個包含cs的StringBuilder對象,末尾附加16個空元素
StringBuilder(int initCapacity)創建一個容量為initCapacity的StringBuilder對象
StringBuilder(String s)

創建一個包含s的StringBuilder對象,末尾附加16個空元素

?

?

?

?

?

?

在大部分情況下,StringBuilder > StringBuffer。這主要是由于前者不需要考慮線程安全。

public class StringDemo2 {public static void main(String[] args) {// 表示獲取從1970-01-01 00:00:00到現在的毫秒值long begin = System.currentTimeMillis();StringBuilder sb = new StringBuilder();for (int i = 0; i < 100000000; i++) {sb.append("a");}String str = sb.toString();long end = System.currentTimeMillis();System.out.println(end - begin);}}

運行結果:

891

從結果中我們可以看出雖然操作的數據增多,但是程序運行的時間卻大大縮短。

整個程序運行過程中只創建了3的對象

StringBuffer(JDK1.0)

StringBuffer:字符串變量(Synchronized,即線程安全)。如果要頻繁對字符串內容進行修改,出于效率考慮最好使用 StringBuffer,如果想轉成 String 類型,可以調用 StringBuffer 的 toString() 方法。

Java.lang.StringBuffer 線程安全的可變字符序列。在任意時間點上它都包含某種特定的字符序列,但通過某些方法調用可以改變該序列的長度和內容。可將字符串緩沖區安全地用于多個線程。

StringBuffer 上的主要操作是 append 和 insert 方法,可重載這些方法,以接受任意類型的數據。每個方法都能有效地將給定的數據轉換成字符串,然后將該字符串的字符追加或插入到字符串緩沖區中。

  • append 方法始終將這些字符添加到緩沖區的末端;
  • insert 方法則在指定的點添加字符。

例如,如果 z 引用一個當前內容是 start 的字符串緩沖區對象,則此方法調用 z.append("le") 會使字符串緩沖區包含 startle ,而 z.insert(4, "le") 將更改字符串緩沖區,使之包含 starlet

StringBuffer 方法

以下是 StringBuffer 類支持的主要方法:

序號方法描述
1 public StringBuffer append(String s)
將指定的字符串追加到此字符序列。
2 public StringBuffer reverse()
?將此字符序列用其反轉形式取代。
3 public delete(int start, int end)
移除此序列的子字符串中的字符。
4 public insert(int offset, int i)
將 int 參數的字符串表示形式插入此序列中。
5 replace(int start, int end, String str)
使用給定 String 中的字符替換此序列的子字符串中的字符。

?

?

?

?

?

?

?

?

?

?

實例:

public class Test6{public static void main(String args[]){StringBuffer str = new StringBuffer("All say:");str.append("I ");str.append("love ");str.append("cjj");System.out.println(str); } }

運行結果:

All say:I love cjj

三者區別

String 類型和 StringBuffer 的主要性能區別:String 是不可變的對象, 因此在每次對 String 類型進行改變的時候,都會生成一個新的 String 對象,然后將指針指向新的 String 對象,所以經常改變內容的字符串最好不要用 String ,因為每次生成對象都會對系統性能產生影響,特別當內存中無引用對象多了以后, JVM 的 GC 就會開始工作,性能就會降低。

使用 StringBuffer 類時,每次都會對 StringBuffer 對象本身進行操作,而不是生成新的對象并改變對象引用。所以多數情況下推薦使用 StringBuffer ,特別是字符串對象經常改變的情況下。

?

轉載于:https://www.cnblogs.com/chuijingjing/p/9489229.html

總結

以上是生活随笔為你收集整理的Java 字符串拼接 StringBuilder() StringBuffer的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。