国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java StringBuilder對(duì)比String的優(yōu)點(diǎn)和15個(gè)經(jīng)典案例

這篇具有很好參考價(jià)值的文章主要介紹了java StringBuilder對(duì)比String的優(yōu)點(diǎn)和15個(gè)經(jīng)典案例。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


Java中的 StringBuilder類(lèi)和 String類(lèi)在處理字符串時(shí)有顯著的區(qū)別,主要體現(xiàn)在可變性、性能以及線程安全性等方面:

區(qū)別:

  1. 可變性:

    • String:是不可變的。每次對(duì)String對(duì)象進(jìn)行拼接、替換等操作時(shí),都會(huì)創(chuàng)建一個(gè)新的String對(duì)象,原始對(duì)象保持不變。
    • StringBuilder:是可變的。它提供了append()、insert()、delete()等方法,可以直接修改對(duì)象內(nèi)部的字符數(shù)組,不需要每次都創(chuàng)建新的對(duì)象。
  2. 性能:

    • String:由于其不可變性,在大量字符串操作(尤其是連接)時(shí),會(huì)產(chǎn)生較多臨時(shí)對(duì)象,消耗內(nèi)存且影響性能。
    • StringBuilder:對(duì)于頻繁的字符串修改操作,性能更優(yōu),因?yàn)樗赜靡逊峙涞膬?nèi)存空間,減少垃圾回收壓力。
  3. 線程安全:

    • String:本身的操作不是線程安全的,但由于不可變性,一旦創(chuàng)建后,多個(gè)線程讀取不會(huì)產(chǎn)生問(wèn)題。
    • StringBuilder:在單線程環(huán)境下效率更高,因?yàn)闆](méi)有同步開(kāi)銷(xiāo);而在多線程環(huán)境下,如果需要并發(fā)修改,應(yīng)該使用StringBuffer,它是線程安全版本的StringBuilder

使用StringBuilder的優(yōu)點(diǎn)案例:

以下是一些使用StringBuilder的優(yōu)勢(shì)場(chǎng)景及其示例代碼:

1. 字符串拼接

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
    sb.append("Value: ").append(i).append("\n");
}
String result = sb.toString(); // 最終結(jié)果是一個(gè)包含大量拼接內(nèi)容的字符串

在循環(huán)中多次拼接字符串時(shí),使用StringBuilder可以避免大量的中間String對(duì)象生成。

2. 構(gòu)建動(dòng)態(tài)查詢(xún)語(yǔ)句

StringBuilder sql = new StringBuilder("SELECT * FROM Users WHERE ");
if (!name.isEmpty()) {
    sql.append("Name='").append(name).append("' AND ");
}
if (!age <= 0) {
    sql.append("Age=").append(age);
}
String query = sql.toString().trim();

根據(jù)條件動(dòng)態(tài)構(gòu)造SQL查詢(xún)語(yǔ)句時(shí),使用StringBuilder可以靈活添加或刪除條件。

3. 格式化輸出

StringBuilder logMessage = new StringBuilder();
logMessage.append("Timestamp: ")
          .append(new Date())
          .append(", Event: ")
          .append(eventDescription)
          .append(", Details: ")
          .append(details);
System.out.println(logMessage.toString());

構(gòu)建日志消息時(shí),通過(guò)StringBuilder逐個(gè)添加各個(gè)部分,然后一次性打印。

4. 字符串反轉(zhuǎn)

StringBuilder strBuilder = new StringBuilder("Hello World");
strBuilder.reverse();
String reversedStr = strBuilder.toString(); // "dlroW olleH"

使用StringBuilder的reverse()方法可以高效地實(shí)現(xiàn)字符串反轉(zhuǎn)。

5. 插入字符串

StringBuilder sb = new StringBuilder("This is a test.");
int index = 7;
sb.insert(index, "long "); // 插入"long "
String modifiedStr = sb.toString(); // "This is long a test."

可以在指定位置插入字符串,無(wú)需創(chuàng)建新對(duì)象。

6. 刪除子串

StringBuilder sb = new StringBuilder("Hello, this is a test.");
sb.delete(7, 14); // 刪除從索引7到13的子串
String trimmedStr = sb.toString(); // "Hello, test."

當(dāng)然,以下是更多的StringBuilder使用優(yōu)點(diǎn)案例:

7. 字符串替換

StringBuilder sb = new StringBuilder("Hello, world!");
sb.replace(7, 12, "Java"); // 將"world"替換為"Java"
String replacedStr = sb.toString(); // "Hello, Java!"

使用replace()方法可以高效地在原字符串基礎(chǔ)上進(jìn)行替換操作。

8. 構(gòu)建復(fù)雜JSON或XML結(jié)構(gòu)

StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.append("{");
jsonBuilder.append("\"name\": \"John\", ");
jsonBuilder.append("\"age\": ").append(30).append(", ");
jsonBuilder.append("\"city\": \"New York\"");
jsonBuilder.append("}");
String jsonString = jsonBuilder.toString(); // "{"name": "John", "age": 30, "city": "New York"}"

在構(gòu)造復(fù)雜的JSON或XML文本時(shí),利用StringBuilder逐個(gè)添加屬性和值,避免頻繁創(chuàng)建新對(duì)象。

9. 處理用戶(hù)輸入的大量數(shù)據(jù)

Scanner scanner = new Scanner(System.in);
StringBuilder inputBuffer = new StringBuilder();

while (scanner.hasNextLine()) {
    inputBuffer.append(scanner.nextLine()).append("\n");
}
String userInput = inputBuffer.toString().trim();

當(dāng)需要收集用戶(hù)輸入的大量文本時(shí),使用StringBuilder能有效減少內(nèi)存消耗和提高處理速度。

10. 動(dòng)態(tài)生成HTML頁(yè)面

```java
StringBuilder htmlBuilder = new StringBuilder("<html><body>");
for (String item : itemList) {
    htmlBuilder.append("<div>").append(item).append("</div>");
}
htmlBuilder.append("</body></html>");
String htmlPage = htmlBuilder.toString();
```
在動(dòng)態(tài)生成HTML或其他標(biāo)記語(yǔ)言時(shí),通過(guò)`StringBuilder`逐行添加元素內(nèi)容,形成完整的頁(yè)面。

繼續(xù)列舉StringBuilder在實(shí)際場(chǎng)景中的優(yōu)點(diǎn)案例:

11. 處理字符串格式轉(zhuǎn)換

```java
StringBuilder hexBuilder = new StringBuilder();
for (byte b : byteArray) {
    hexBuilder.append(String.format("%02X ", b));
}
String hexString = hexBuilder.toString().trim(); // 用于將字節(jié)數(shù)組轉(zhuǎn)換為十六進(jìn)制字符串
```
當(dāng)需要將數(shù)值或其他類(lèi)型的數(shù)據(jù)轉(zhuǎn)換成特定格式的字符串時(shí),利用`StringBuilder`可以高效地完成這一過(guò)程。

12. 實(shí)現(xiàn)字符串緩沖區(qū)

```java
StringBuilder buffer = new StringBuilder();

public void addMessage(String message) {
    buffer.append(message).append("\n");
}

public String getBufferContent() {
    return buffer.toString();
}
```
在某些需要維護(hù)一個(gè)可變字符串緩沖區(qū)的場(chǎng)景中(例如記錄日志或消息隊(duì)列),`StringBuilder`可以作為一個(gè)高效的字符串存儲(chǔ)容器。

13. 拼接大量字符串?dāng)?shù)組元素

```java
String[] words = {"Hello", "World", "Java"};
StringBuilder sentence = new StringBuilder();
for (String word : words) {
    sentence.append(word).append(" ");
}
sentence.deleteCharAt(sentence.length() - 1); // 刪除末尾多余的空格
String result = sentence.toString(); // "Hello World Java"
```
當(dāng)需要將多個(gè)字符串?dāng)?shù)組元素連接成一個(gè)連續(xù)的句子時(shí),使用`StringBuilder`避免了多次創(chuàng)建和復(fù)制字符串對(duì)象。

14. 計(jì)算字符串長(zhǎng)度限制內(nèi)的文本

```java
int maxLength = 100;
StringBuilder textBuilder = new StringBuilder();
while (/* reading text from a file or stream */) {
    String line = readLine();
    if (textBuilder.length() + line.length() <= maxLength) {
        textBuilder.append(line);
    } else {
        break; // 已達(dá)到最大長(zhǎng)度限制
    }
}
String limitedText = textBuilder.toString();
```
在需要限制輸出文本長(zhǎng)度的場(chǎng)景中,通過(guò)實(shí)時(shí)計(jì)算`StringBuilder`長(zhǎng)度來(lái)決定是否添加更多內(nèi)容。

15. 動(dòng)態(tài)生成SQL IN子句

```java
List<Integer> ids = Arrays.asList(1, 2, 3, 4, 5);
StringBuilder inClause = new StringBuilder("(");
for (int i = 0; i < ids.size(); i++) {
    inClause.append(ids.get(i));
    if (i != ids.size() - 1) {
        inClause.append(", ");
    }
}
inClause.append(")");
String sql = "SELECT * FROM Users WHERE id IN " + inClause.toString();
```
在構(gòu)造包含多個(gè)值的SQL IN子句時(shí),`StringBuilder`能靈活、高效地添加各項(xiàng)值。

以上這些例子進(jìn)一步展示了StringBuilder類(lèi)在各種不同場(chǎng)景下的應(yīng)用優(yōu)勢(shì)??傊?,在涉及頻繁修改、拼接字符串的操作中,選擇StringBuilder能夠顯著提高程序性能并降低內(nèi)存消耗。

python學(xué)習(xí)匯總連接:
50個(gè)開(kāi)發(fā)必備的Python經(jīng)典腳本(1-10)

50個(gè)開(kāi)發(fā)必備的Python經(jīng)典腳本(11-20)

50個(gè)開(kāi)發(fā)必備的Python經(jīng)典腳本(21-30)

50個(gè)開(kāi)發(fā)必備的Python經(jīng)典腳本(31-40)

50個(gè)開(kāi)發(fā)必備的Python經(jīng)典腳本(41-50)
————————————————

?最后我們放松一下眼睛
java StringBuilder對(duì)比String的優(yōu)點(diǎn)和15個(gè)經(jīng)典案例,java,開(kāi)發(fā)語(yǔ)言文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-785537.html

到了這里,關(guān)于java StringBuilder對(duì)比String的優(yōu)點(diǎn)和15個(gè)經(jīng)典案例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java字符串知多少:String、StringBuffer、StringBuilder

    Java字符串知多少:String、StringBuffer、StringBuilder

    String 是 Java 中使用得最頻繁的一個(gè)類(lèi)了,不管是作為開(kāi)發(fā)者的業(yè)務(wù)使用,還是一些系統(tǒng)級(jí)別的字符使用, String 都發(fā)揮著重要的作用。 String 是 不可變 的、 final 的,不能被繼承,且 Java 在運(yùn)行時(shí)也保存了一個(gè)字符串池(String pool) ,就使得 String 變得很特殊。 實(shí)現(xiàn)三個(gè)接口:

    2024年02月06日
    瀏覽(32)
  • 【java】關(guān)于String、StringBuffer和StringBuilder的那些事

    【java】關(guān)于String、StringBuffer和StringBuilder的那些事

    ? 目錄 一、String 1、構(gòu)造方法 2、字符串的不可變性 3、字符串的比較 4、 String的常用方法: 二、StringBuider和StringBuffer 1、字符串的拼接 2、StringBuider與StringBuffer 總結(jié) ? ? String類(lèi)提供的構(gòu)造方式非常多,常用的就以下兩種: ? 注意: 1、String 是引用類(lèi)型,內(nèi)部并不存儲(chǔ)字符串

    2024年04月10日
    瀏覽(25)
  • 【JAVA】String ,StringBuffer 和 StringBuilder 三者有何聯(lián)系?

    【JAVA】String ,StringBuffer 和 StringBuilder 三者有何聯(lián)系?

    個(gè)人主頁(yè):【??個(gè)人主頁(yè)】 系列專(zhuān)欄:【??初識(shí)JAVA】 在之前的文章中我們介紹了JAVA中String的運(yùn)用方法,事實(shí)上在JAVA字符串操作中僅僅只知道String方法是遠(yuǎn)遠(yuǎn)不夠的,今天我們要介紹的 StringBuffer 和 StringBuilder 在字符串操作中同樣占據(jù)總要地位。 和 String 類(lèi)不同的是,S

    2024年02月14日
    瀏覽(24)
  • java中的String使用注意事項(xiàng)、StringBuilder、StringBuffer、StringJoiner

    java中的String使用注意事項(xiàng)、StringBuilder、StringBuffer、StringJoiner

    String使用注意事項(xiàng) 這里第二次創(chuàng)造了0個(gè)對(duì)象是因?yàn)樽址A砍刂幸呀?jīng)有\(zhòng)\\"abc\\\" StringBuilder 注意StringBuilder支持鏈?zhǔn)骄幊?StringBuilder 線程安全與不安全的區(qū)別在于,當(dāng)系統(tǒng)里存在很多人同時(shí)操作同一個(gè)StringBuilder就可能出bug,而StringBuilder不會(huì)。 StringJoiner

    2024年02月12日
    瀏覽(19)
  • Java-String、StringBuffer、StringBuilder區(qū)別及相關(guān)面試題

    Java-String、StringBuffer、StringBuilder區(qū)別及相關(guān)面試題

    在Java編程中,經(jīng)常會(huì)遇到處理字符串的需求。Java提供了多個(gè)類(lèi)來(lái)處理字符串,其中最常用的是String、StringBuffer和StringBuilder類(lèi)。本文將介紹這三個(gè)類(lèi)的基本用法和區(qū)別。 String是Java中最常用的字符串類(lèi),它是不可變的,也就是說(shuō)一旦被創(chuàng)建,它的值就不能被改變。下面是Stri

    2024年02月11日
    瀏覽(21)
  • 【后端面經(jīng)-Java】String與StringBuffer與StringBuilder的比較

    目錄 1. String 2. StringBuffer 3. StringBuilder 4. 性能提升 5. 總結(jié)和比較 面試模擬 參考資料 不可變 查看 String 源碼如下:由源碼可知,String中存儲(chǔ)數(shù)據(jù)的數(shù)組被 final 修飾,因此是不可變的 運(yùn)算和操作 創(chuàng)建對(duì)象 創(chuàng)建對(duì)象有兩種方式:兩種方式都會(huì)在棧中創(chuàng)建一個(gè)字符串變量

    2024年02月16日
    瀏覽(20)
  • Java基礎(chǔ)09 —— 字符序列--String、StringBuilder、StringBuffer區(qū)別及其方法介紹

    字符與字符串 字符類(lèi)型(char)是Java中的基本數(shù)據(jù)類(lèi)型,占2個(gè)字節(jié)16位,默認(rèn)值是 ‘u0000’ 。字符是用單引號(hào)引住的單個(gè)符號(hào). 字符串(String)是用雙引號(hào)引住的任意個(gè)字符,是引用數(shù)據(jù)類(lèi)型,默認(rèn)值是null 。字符串其實(shí)就是字符組成的序列 字符串聲明 舉例: 字符序列 多個(gè)字符

    2024年02月09日
    瀏覽(22)
  • 36、Java 中的 String、StringBuilder、StringBuffer、字符串常量池和 intern 方法

    36、Java 中的 String、StringBuilder、StringBuffer、字符串常量池和 intern 方法

    ?? Java 中用 java.lang.String 類(lèi)代表字符串 ?? 底層用 char[] 存儲(chǔ)字符數(shù)據(jù)。從 Java9 開(kāi)始,底層使用 byte[] 存儲(chǔ)字符數(shù)據(jù) ?? 字符串的底層是 char[] ,但是 char 數(shù)組和字符串不能等價(jià)。 char 數(shù)組是 char 數(shù)組,字符串是字符串。 ?? C 語(yǔ)言中是可以把 char 數(shù)組 和字符串等價(jià)的 ??

    2023年04月08日
    瀏覽(44)
  • Java中String類(lèi)型的創(chuàng)建關(guān)系、什么是常量池、以及StringBuilder/Buffer等

    這段 Java 代碼中,字符串 s1 和 s2 都使用字面量的方式賦值,它們?cè)诰幾g時(shí)會(huì)被放入常量池中。由于字符串常量池的特性,s1 和 s2 在常量池中的引用地址是相同的,因此 s1 == s2 的結(jié)果為 true。 而字符串 s3 和 s4 是通過(guò) new 創(chuàng)建的,它們?cè)趦?nèi)存中是兩個(gè)不同的對(duì)象,因此

    2023年04月08日
    瀏覽(16)
  • 多線程四大經(jīng)典案例

    多線程四大經(jīng)典案例

    本節(jié)內(nèi)容很重要, 希 望 大 家 可 以 好 好 看 看 , 一 起 加 油~ 1.單線模式 1.1餓漢模式 1.2懶漢模式 2.阻塞式隊(duì)列 2.1阻塞隊(duì)列是什么 2.2生產(chǎn)者消費(fèi)者模型 2.3標(biāo)準(zhǔn)庫(kù)中的阻塞隊(duì)列 2.4阻塞隊(duì)列的實(shí)現(xiàn) 3.定時(shí)器 3.1定時(shí)器是什么 3.2標(biāo)準(zhǔn)庫(kù)中的定時(shí)器 3.3實(shí)現(xiàn)定時(shí)器 4.線程池 4.1什么

    2023年04月27日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包