1629. 按鍵持續(xù)時(shí)間最長的鍵
904
2025-04-04
StringBuilder 類
字符串拼接問題
StringBuilder 概述
構(gòu)造方法
常用方法
append 方法
toString 方法
字符串拼接問題
由于 String 類的對(duì)象內(nèi)容不可改變, 所以每當(dāng)進(jìn)行字符串拼接時(shí), 總會(huì)在內(nèi)存中創(chuàng)建一個(gè)新的對(duì)象. 例如:
public class Test17 { public static void main(String[] args) { String s = "Hello"; s += "World"; System.out.println(s); } }
1
2
3
4
5
6
7
在 API 中對(duì) String 類有這樣的描述: 字符串是常量, 它們的值在創(chuàng)建后不能被更改.
根據(jù)這句話分析我們的代碼, 其實(shí)總共產(chǎn)生了三個(gè)字符串, 即 “Hello”, “World” 和 “helloworld”. 引用變量 s 首先指向 Hello 對(duì)象, 最終指向拼接出來的新字符串對(duì)象, 即 helloworld.
由此可知, 如果對(duì)字符串進(jìn)行拼接操作, 每次拼接, 都會(huì)構(gòu)建一個(gè)新的 String 對(duì)象, 既費(fèi)時(shí), 有浪費(fèi)空間. 為了解決這一問題, 可以使用java.lang.StringBuilder類.
StringBuilder 概述
查閱java.lang.StringBuilder的 API, StringBuilder 又稱為可變字符序列. 它是一個(gè)類似于 String 的字符串緩沖區(qū), 通過某些方法調(diào)用可以改變該序列的長度和內(nèi)容.
原來 StringBuilder 是個(gè)字符串的緩沖區(qū), 即它是一個(gè)容器, 容器中可以組裝很多字符串. 并且能夠?qū)ζ渲械淖址M(jìn)行各種操作.
它的內(nèi)部擁有一個(gè)數(shù)組用來存放字符串內(nèi)容, 進(jìn)行字符串拼接時(shí), 直接在數(shù)組中加入新內(nèi)容. StringBuilder 會(huì)自動(dòng)維護(hù)的擴(kuò)容. 原理如下圖所示: (默認(rèn) 16 字符空間, 超過子歐諾個(gè)擴(kuò)充)
構(gòu)造方法
根據(jù) StringBuilder 的 API 文檔, 常用構(gòu)造方法有 2 個(gè):
public StringBuilder(): 構(gòu)造一個(gè)空的 StringBuilder 容器
public StringBuilder(String str): 構(gòu)造一個(gè) StringBuilder 容器, 并將字符串添加進(jìn)去
public class Test18 { public static void main(String[] args) { // 無參構(gòu)造 StringBuilder sb1 = new StringBuilder(); System.out.println(sb1); // 輸出結(jié)果: (空白) // 有參構(gòu)造 StringBuilder sb2 = new StringBuilder("iamlittlewhite"); System.out.println(sb2); // 輸出結(jié)果: iamlittlewhite } }
1
2
3
4
5
6
7
8
9
10
11
常用方法
StringBuilder 常用的方法有 2 個(gè):
public StringBuilder append(...): 添加任意類型數(shù)據(jù)的字符串形式, 并返回當(dāng)前對(duì)象自身
public String toString(): 將當(dāng)前 StringBuilder 對(duì)象轉(zhuǎn)換為 String 對(duì)象
append 方法
append 方法具體有多種重載形式, 可以接收任意類型的參數(shù). 任何數(shù)據(jù)作為參數(shù)都會(huì)將對(duì)應(yīng)的字符串內(nèi)容添加到 StringBuilder 中. 例如:
public class Test19 { public static void main(String[] args) { // 創(chuàng)建對(duì)象 StringBuilder builder = new StringBuilder(); // public StringBuilder append(任意類型) StringBuilder builder2 = builder.append("hello"); // 對(duì)比一下 System.out.println("builder:"+builder); System.out.println("builder2:"+builder2); System.out.println(builder == builder2); // 可以添加 任何類型 builder.append("hello"); builder.append("world"); builder.append(true); builder.append(100); // 在我們開發(fā)中,會(huì)遇到調(diào)用一個(gè)方法后, 返回一個(gè)對(duì)象的情況. 然后使用返回的對(duì)象繼續(xù)調(diào)用方法. // 這種時(shí)候, 我們就可以把代碼現(xiàn)在一起, 如append方法一樣, 代碼如下 // 鏈?zhǔn)骄幊?builder.append("hello").append("world").append(true).append(100); System.out.println("builder:"+builder); } } 輸出結(jié)果: builder:hello builder2:hello true builder:hellohelloworldtrue100helloworldtrue100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
注: StringBuilder 已經(jīng)覆蓋重寫了 Object 當(dāng)中的 toString 方法.
toString 方法
通過 toString 方法, StringBuilder 對(duì)象會(huì)轉(zhuǎn)換為不可變的 String 對(duì)象.
public class Test20 { public static void main(String[] args) { // 鏈?zhǔn)絼?chuàng)建 StringBuilder sb = new StringBuilder("Hello").append("World").append("Java"); // 調(diào)用方法 String str = sb.toString(); System.out.println(str); // 調(diào)試輸出: HelloWorldJava } }
1
2
3
4
5
6
7
8
9
Java
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。