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

Java開發(fā)手冊中為什么不建議在for循環(huán)中使用“+“進(jìn)行字符串操作

這篇具有很好參考價值的文章主要介紹了Java開發(fā)手冊中為什么不建議在for循環(huán)中使用“+“進(jìn)行字符串操作。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

場景

java開發(fā)手冊中對于循環(huán)體中進(jìn)行字符串的拼接要求如下:

【推薦】循環(huán)體內(nèi),字符串的連接方式,使用 StringBuilder 的 append 方法進(jìn)行擴展。

說明:下例中,反編譯出的字節(jié)碼文件顯示每次循環(huán)都會 new 出一個 StringBuilder 對象,然后進(jìn)行 append操作,

最后通過 toString 方法返回 String 對象,造成內(nèi)存資源浪費。

Java開發(fā)手冊中為什么不建議在for循環(huán)中使用“+“進(jìn)行字符串操作

并且還提供了反例:

?? String str = "start";
????for (int i = 0; i < 100; i++) {
???????? str = str + "hello";
????}

Java中字符串占位替換、字符串拼接、字符串與Collection互轉(zhuǎn)的方式:

Java中字符串占位替換、字符串拼接、字符串與Collection互轉(zhuǎn)的方式_霸道流氓氣質(zhì)的博客-CSDN博客

字符串的拼接的幾種方式可以參考上面的博客。

除了使用+拼接字符串之外,還可以使用 String 類中的方法 concat 方法來拼接字符串。

示例代碼:

??????? String a = "a";
??????? String b = "b";
??????? String c = a.concat(b);
??????? System.out.println(c);

注:

博客:
霸道流氓氣質(zhì)的博客_CSDN博客-C#,架構(gòu)之路,SpringBoot領(lǐng)域博主

下面看一下Java中String的concat方法的源碼

??????? //??? public String concat(String str) {
??????? //??????? int otherLen = str.length();
??????? //??????? if (otherLen == 0) {
??????? //??????????? return this;
??????? //??????? }
??????? //??????? int len = value.length;
??????? //??????? char buf[] = Arrays.copyOf(value, len + otherLen);
??????? //??????? str.getChars(buf, len);
??????? //??????? return new String(buf, true);
??????? //??? }

Java開發(fā)手冊中為什么不建議在for循環(huán)中使用“+“進(jìn)行字符串操作

首先創(chuàng)建一個字符數(shù)組,長度是已有字符串和待拼接字符串的長度之和,再把兩個字符串的值復(fù)制到新的字符數(shù)組中,

并用這個字符數(shù)組創(chuàng)建一個新的String對象并返回。

為了驗證上面for循環(huán)中讓使用StringBuilder,而不讓使用+,編寫以下代碼并對比耗時

??????? try(Cost cost = new Cost()){
??????????? String aa = "aa";
??????????? for (int i = 0; i < 100000; i++) {
?????????????? aa+="bb";
??????????? }
??????? }

??????? try(Cost cost = new Cost()){
??????????? StringBuilder aa = new StringBuilder();
??????????? for (int i = 0; i < 100000; i++) {
??????????????? aa.append("bb");
??????????? }
??????? }

耗時輸出結(jié)果如下

??????? //cost:11565
??????? //cost:1

Java開發(fā)手冊中為什么不建議在for循環(huán)中使用“+“進(jìn)行字符串操作

?

注意這里的代碼耗時統(tǒng)計的方式可以參考

Java實戰(zhàn)-基于JDK的LRU算法實現(xiàn)、優(yōu)雅的實現(xiàn)代碼耗時統(tǒng)計(Spring AOP、AutoCloseable方式):

Java實戰(zhàn)-基于JDK的LRU算法實現(xiàn)、優(yōu)雅的實現(xiàn)代碼耗時統(tǒng)計(Spring AOP、AutoCloseable方式)_霸道流氓氣質(zhì)的博客-CSDN博客

分析原因:

在for循環(huán)中,每次都是new了一個StringBuilder,然后再把String轉(zhuǎn)成StringBuilder,再進(jìn)行append。

而頻繁的新建對象當(dāng)然要耗費很多時間了,不僅僅會耗費時間,頻繁的創(chuàng)建對象,還會造成內(nèi)存資源的浪費。

為了驗證以上原因,我們對使用+進(jìn)行拼接字符串的代碼進(jìn)行反編譯查看

Java開發(fā)手冊中為什么不建議在for循環(huán)中使用“+“進(jìn)行字符串操作?

總結(jié):

經(jīng)過對比,我們發(fā)現(xiàn),直接使用StringBuilder的方式是效率最高的。

因為StringBuilder天生就是設(shè)計來定義可變字符串和字符串的變化操作的。

但是,還要強調(diào)的是:

?1.如果不是在循環(huán)體中進(jìn)行字符串拼接的話,直接使用+就好了。

2.如果在并發(fā)場景中進(jìn)行字符串拼接的話,要使用StringBuffer來代替StringBuilder文章來源地址http://www.zghlxwxcb.cn/news/detail-472552.html

到了這里,關(guān)于Java開發(fā)手冊中為什么不建議在for循環(huán)中使用“+“進(jìn)行字符串操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 為什么建議同時學(xué)多門編程語言

    晨讀一本名叫《4點起床》的書,書中有一段描述與最近學(xué)習(xí)編制語言時自己的感受完全一致。算是一個小經(jīng)驗,分享給大家。 書中有一章的標(biāo)題為《同時學(xué)六國語言記起來比較快》,其中有兩段描述如下: 為什么我推薦大家同時學(xué)不同的語言呢?實不相瞞,我這幾年在學(xué)西

    2024年02月10日
    瀏覽(33)
  • 為什么建議使用虛擬機來安裝Linux?

    個人認(rèn)為,通過虛擬機軟件學(xué)習(xí)是初學(xué)者學(xué)習(xí) Linux 的最佳方式。 在與部分初學(xué)者的交流中,我發(fā)現(xiàn)很多初學(xué)者都認(rèn)為,學(xué)習(xí) Linux 就必須將自己的電腦裝成 Linux 系統(tǒng)或者必須要有真正的服務(wù)器設(shè)備。而實際上,這是一些機構(gòu)、書籍或網(wǎng)絡(luò)文章給大家傳導(dǎo)的錯誤思想。 其實,

    2024年02月08日
    瀏覽(38)
  • 為什么idea建議使用“+”拼接字符串

    各位小伙伴在字符串拼接時應(yīng)該都見過下面這種提示: 內(nèi)容翻譯:報告StringBuffer、StringBuilder或StringJoiner的任何用法,這些用法可以用單個java.lang.String串聯(lián)來替換。使用字符串串聯(lián)可以使代碼更短、更簡單。只有當(dāng)?shù)玫降拇?lián)至少與原始代碼一樣高效或更高效時,此檢查才會

    2024年02月06日
    瀏覽(31)
  • 為什么單片機上的程序不建議使用malloc?

    為什么單片機上的程序不建議使用malloc?

    做單片機研發(fā)前幾年,一直沒用過動態(tài)內(nèi)存分配的功能,但是如果想成為軟件架構(gòu)設(shè)計師,這是繞不過的一道坎。 其實單片機很少使用c標(biāo)準(zhǔn)庫自帶的malloc()函數(shù)去動態(tài)分配內(nèi)存,除非,你看老板不爽... 因為有缺陷,文章后面會提及。 一般是工程師借助現(xiàn)成的參考代碼,然后

    2024年02月22日
    瀏覽(26)
  • 我為什么不建議使用框架默認(rèn)的 DefaultMeterObservationHandler

    我為什么不建議使用框架默認(rèn)的 DefaultMeterObservationHandler

    個人創(chuàng)作公約:本人聲明創(chuàng)作的所有文章皆為自己原創(chuàng),如果有參考任何文章的地方,會標(biāo)注出來,如果有疏漏,歡迎大家批判。如果大家發(fā)現(xiàn)網(wǎng)上有抄襲本文章的,歡迎舉報,并且積極向這個 github 倉庫 提交 issue,謝謝支持~ 另外,本文為了避免抄襲,會在不影響閱讀的情

    2024年01月21日
    瀏覽(25)
  • 為什么不建議企業(yè)用薪資系統(tǒng)來跟蹤項目時間?

    為什么不建議企業(yè)用薪資系統(tǒng)來跟蹤項目時間?

    身處在一個每分鐘都很重要的世界里,企業(yè)必須勤于管理時間和工資。 雖然使用薪資系統(tǒng)進(jìn)行時間跟蹤似乎是一個實用的解決方案,但這種方法可能導(dǎo)致許多問題。 本文將討論專用的時間跟蹤軟件對任何組織都必不可少的原因,以及依靠薪資系統(tǒng)進(jìn)行時間管理可能產(chǎn)生的挑

    2024年02月12日
    瀏覽(46)
  • Go 語言為什么建議多使用切片,少使用數(shù)組?

    大家好,我是 frank,「Golang 語言開發(fā)?!构娞栕髡摺?01 介紹 在 Go 語言中,數(shù)組固定長度,切片可變長度;數(shù)組和切片都是值傳遞,因為切片傳遞的是指針,所以切片也被稱為“引用傳遞”。 讀者朋友們在使用 Go 語言開發(fā)項目時,或者在閱讀 Go 開源項目源碼時,發(fā)現(xiàn)很少

    2024年02月03日
    瀏覽(33)
  • 代碼的壞味道(二)——為什么建議使用模型來替換枚舉?

    在設(shè)計模型時,我們經(jīng)常會使用枚舉來定義類型,比如說,一個員工類 Employee,他有職級,比如P6/P7。順著這個思路,設(shè)計一個 Level 類型的枚舉: 假設(shè)哪天悲催的打工人畢業(yè)了,需要計算賠償金,簡單算法賠償金=工資*工齡 后來,隨著這塊業(yè)務(wù)邏輯的演進(jìn),其實公司是家具備

    2024年02月08日
    瀏覽(39)
  • 為什么 IDEA 建議去掉 StringBuilder,而要使用 “+” 拼接字符串?

    為什么 IDEA 建議去掉 StringBuilder,而要使用 “+” 拼接字符串?

    作者:京東零售 姜波 來源:京東云開發(fā)者社區(qū) 各位小伙伴在字符串拼接時應(yīng)該都見過下面這種提示: 內(nèi)容翻譯:報告StringBuffer、StringBuilder或StringJoiner的任何用法,這些用法可以用單個java.lang.String串聯(lián)來替換。使用字符串串聯(lián)可以使代碼更短、更簡單。只有當(dāng)?shù)玫降拇?lián)至

    2024年02月05日
    瀏覽(39)
  • 編程開發(fā)8大語言詳解,為什么Java是我最推薦的?

    編程開發(fā)8大語言詳解,為什么Java是我最推薦的?

    很多沒有接觸過編程語言的同學(xué),都會覺得編程開發(fā)特別高端和神奇,擔(dān)心理解不了更擔(dān)心學(xué)不會。 當(dāng)然,也有人會認(rèn)為,你既然是做編程的,那么你應(yīng)該什么都會,什么軟件的開發(fā)都能完成,這是平哥經(jīng)常聽到的兩種聲音。 在此,平哥需要給大家科普一下, 編程確實改變

    2024年02月05日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包