java 板


LINE

※ 引述《cyclone350 (老子我最神)》之銘言: : : 推 AI3767:那篇在迴圈內+=, 不是一次性加起來, 確實很高可能造成變慢 04/01 23:46 : : → cha122977:可以請教為何 str+=str; 會重複宣告嗎?不太明白 04/01 23:56 : 大概看懂版主跟那篇文章是啥意思了,我用白話一點 (有務請修正) : 如果你的程式碼長這樣 : String str = ''; : while(i < 100000) { : str += 'a'; : } : jdk 會把迴圈解釋成像這樣 : while(i < 100000) { : str = new StringBuilder(str).append('a'); : } : 但是如果你自己用 StringBuilder 的話會是這樣用 : StringBuilder str = new StringBuilder(); : while(i < 100000) { : str.append('a'); : } : 所以差在的時間應該很明顯在哪邊 !! : 雖然 + 號會被解釋成 append,但是他不是萬用的 : 在某些情況仍需要自行使用 StringBuilder 來提升效能 : 這應該就是那邊文章的結論 !? 這一串討論看來有些紊亂。 我本來以為多數的人都已經知道在回圈內使用 operator + 來串接字串做累加的 恐怖(在時間與空間上)與原因,畢竟 JWorld@TW 上這一篇文章已掛了好多年了。 http://www.javaworld.com.tw/jute/post/view?bid=29&id=15160&sty=1&tpg=3&age=-1 在程式碼中一個以 operator + 串接多個 sub-expression 的 expression 在編譯 其會被編譯器換成 StringBuffer(for Java 1.5-)/StringBuilder(for Java 1.5+) 的多個操作(若是各 sub-expression 都是編譯期常數,則整個 expression 由 編譯器替換成一個常數)。 通常臨時要把多個數值組合成一個字串時,直接用 operator + 串起來是無大礙。 但偏偏許多初心者很喜歡用在回圈裡使用 operator + 來集成一個最後的結果字串, 如同你文中的第一個例子。 這種做法恐怖在對空間與時間上的浪費,把 StringBuffer/StringBuilder 比喻成 筆記簿,這樣子的行為就如同一個人在學期初買了一張紙當筆記簿。 上了一堂課後,發現他的筆記簿已經用完,於是他又去買了兩張紙當作新 筆記簿,還記得先把前一本筆記簿(一張紙)的內容抄寫過來。 上了第二堂課,又發現筆記簿用完了,於是再去買三張紙成為新筆記簿,也記得 把前一本筆記簿(兩張紙)的內容抄寫到新筆記簿裡。 上了第三堂課,又發現筆記簿用完了,於是再去買四張紙成為新筆記簿,也記得 把前一本筆記簿(三張紙)的內容抄寫到新筆記簿裡。 ... ... ... 到了學期末最後一堂,他發現他獲得了一本厚達 1000 張的完美筆記,以及... 他曾有過的筆記簿群共 499500 張紙,記不清他用掉多少筆在抄寫上,與多少勞力 與時間在重復抄寫上。 [傻瓜第四部曲.完] --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.172.187.57
1F:推 NewSpec:這篇正解 經常可以看到有文章在強調這個antipattern 04/02 01:57
2F:→ cha122977:謝謝 我是知道一些守則 但對這些守則的由來不是全盤了解 04/02 03:37
3F:→ swpoker:老實說~除非是有大量處理字串的問題~ 04/02 08:58
4F:→ swpoker:例如SQL字串這種需要道stringbuilder? 04/02 09:14
5F:推 PsMonkey:以前沒探究原因,只是單純記得不要用 + 號 [遮臉] 04/02 11:33
6F:推 BBBroflovski:還好平時有在逛java版 有逛有保佑XD 04/03 02:00







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP