作者PsMonkey (痞子军团团长)
看板java
标题Re: [问题] 重复new StringBuilder 的效能问题
时间Sun May 12 22:15:44 2013
※ 引述《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
1F:推 love112302:谢谢版大 拜读中 Q_Q JIT 真的是很聪明阿 @@ 05/12 23:29