Re: [問題] 重複new StringBuilder 的效能問題

看板java作者 (痞子軍團團長)時間11年前 (2013/05/12 22:15), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《love112302 (小黑炭)》之銘言: : 最近在寫一個程式,突然冒出來的疑問 : 如果我現在有一個迴圈 : String text = "abcd"; : for(int i = 0; i < 500000; i++){ : new StringBuilder(text).append(text).toString(); : } : : 跟 : : StringBuilder sb = new StringBuilder(); : for(int i = 0; i < 500000; i++){ : sb.append(text).append(text).toString(); : sb.delete(0, sb.length()); : } : : 這樣子哪一個是比較好的寫法呢? : 自己測試時間有時候第一個快 有時候第一個慢 : 不知道哪一個方法才是比較省能的寫法 先不管你的程式有沒有意義(我是看不出所以然啦 Orz) 我覺得以現在的軟硬體的進步程度 用時間來測試效能,除非你的測試資料十分巨大 又或著測試出來的時間有好幾個量級的差異(不要問我什麼是「量級」 XD) 不然實在沒有什麼特別的意義 更不用說那個神奇的 JIT 到底做了什麼手腳 (搜尋一下我前兩個月的翻譯文) 我建議你用 javap.exe 去回頭看你的程式碼 以那個結果來學理上的分析快慢比較有意義 : → qrtt1:第 2 個為什麼不是把 length 設成 0 就好? 05/12 21:29 : 不好意思,請問是要怎麼設成0呢? : 剛開始用 StringBuilder 所以不太懂 QQ" : 我用 sb.delete(0, sb.length()); : 的目的是把 sb 裡面的東西都清掉,這樣下次用到就是乾淨的sb http://docs.oracle.com/javase/6/docs/api/java/lang/ StringBuilder.html#setLength(int) API 應該講的很清楚了 Java method 命名的都還算完整清楚 光看名稱大抵上都能對應,尤其是這種 setter -- 錢鍾書: 說出來的話 http://www.psmonkey.org 比不上不說出來的話 Java 版 cookcomic 版 只影射著說不出來的話 and more...... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.30.120

05/12 23:29, , 1F
謝謝版大 拜讀中 Q_Q JIT 真的是很聰明阿 @@
05/12 23:29, 1F
文章代碼(AID): #1HZwGJE0 (java)
文章代碼(AID): #1HZwGJE0 (java)