Java基礎(chǔ) 第三節(jié) 第四課

      網(wǎng)友投稿 904 2025-04-04

      StringBuilder 類


      字符串拼接問題

      StringBuilder 概述

      構(gòu)造方法

      常用方法

      append 方法

      Java基礎(chǔ) 第三節(jié) 第四課

      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)容。

      上一篇:Metal之MTLBuffer批量加載頂點(diǎn)數(shù)量較多的圖形渲染
      下一篇:如何打印excel表格(如何打印excel表格指定區(qū)域)
      相關(guān)文章
      国产精品亚洲精品| 亚洲国产美女福利直播秀一区二区| 亚洲第一香蕉视频| 亚洲A∨无码一区二区三区| 丝袜熟女国偷自产中文字幕亚洲| 亚洲成年人啊啊aa在线观看| 日产国产精品亚洲系列| 亚洲aⅴ无码专区在线观看| 亚洲乱码无人区卡1卡2卡3| 亚洲人成网站999久久久综合| 91亚洲精品视频| 精品亚洲aⅴ在线观看| 久久精品亚洲一区二区三区浴池| 久久久综合亚洲色一区二区三区| 亚洲av永久无码制服河南实里| 亚洲人成网站在线播放vr| 亚洲精品无码专区久久久| 亚洲毛片αv无线播放一区| 久久精品国产亚洲一区二区| 亚洲成AV人片在线观看WWW| 久久伊人久久亚洲综合| 亚洲图片在线观看| 亚洲欧洲国产精品久久| va天堂va亚洲va影视中文字幕| 亚洲一级高清在线中文字幕| 国产精品高清视亚洲精品| 亚洲中文字幕无码av永久| 亚洲国产精品无码久久久秋霞1| 亚洲精品国产日韩| 亚洲精品国产综合久久久久紧| 成人婷婷网色偷偷亚洲男人的天堂| 激情小说亚洲图片| 国产成人精品亚洲精品| 亚洲大成色www永久网站| 91精品国产亚洲爽啪在线观看| 亚洲成人福利网站| 亚洲中文字幕无码中文字| jizzjizz亚洲日本少妇| 亚洲五月午夜免费在线视频| 亚洲中文字幕日产乱码高清app| 亚洲AV无码一区东京热|