作者PsMonkey (痞子军团团长)
看板java
标题Re: [问题] int取个别数值问题..
时间Thu Jan 31 01:31:02 2013
※ 引述《cyclone350 (老子我最神)》之铭言:
: ※ 引述《PsMonkey (痞子军团团长)》之铭言:
: : //省去产生字串的成本
: : int[] array = new int[(int)(Math.log10(value)+1)];
: : //JS 写习惯,会习惯用一个变数代替 foo.attribute
: : int length = array.length;
: 问个问题,在 String.valueOf(n),在java会在 String pool 生成一个字串
: 然後一个中间物件指向这个字串,最後用物件的 length() 方法 return 一个数字
: String s = String.valueOf(n) 只是让我们在之後可以用这个物件,
: 把他命名为 s ...
: 不管如何,他在下一次 GC 就会被回收掉了,why 不命名就是省去成本?
: → ssccg:因为String.valueOf(n)的成本不只产生String,java API内部 01/31 00:4
: → ssccg:还是跑回圈把int分成一个一个char,所以只用log算长度比较快 01/31 00:5
: → ssccg:不过log也是有些计算,而API的转String有最佳化不是单纯 / % 01/31 00:5
: → ssccg:哪个比较快其实有点难说 01/31 01:0
这边 ssccg 应该有回答到你
不过整体来讲,如果是设计 utility,我想我还是会避免用到 String
因为这个 method 会产生一堆 string
总是 or 总有一天会耗用到 GC
跟 GC 比起来,算 log 的(CPU)成本应该没什麽
: 而在 length = array.length
: 就不会浪费掉所谓的成本吗(多了一个copy动作和4bytes)?
: 因为我本身若为了改效能并不太会动到这块,我认为这只是可读性问题
: 还是有甚麽关键点我漏掉了?
基本上你不知道 for 回圈会跑几次→你不知道 array.length 会用到几次
(当然在这个 case 了不起十次 XD)
如果 array.length 取得很耗资源
(帐面上看起来还是比直接用一个变数慢,实际上... 没研究)
那麽速度自然就慢
你可以说这是 coding style 的问题
也就是回圈里头的判断式不能出现 foo.field 或 foo.method()
为了避免(尤其是) method() 居然是去捞个资料库
所以宁愿一视同仁
毕竟大多数时候,我们可能不会 / 不能去研究 method() 里头怎麽写
: 只是想跟你说你误会我的意思了
基本上我只是想解释清楚,其实你没有违反版规
(因为你推文看起来像是有疑惑 or 质疑)
看起来有没有别的意思... 这我就不敢讲了
明明我还写故事当范例却会被说在酸文
什麽都没写却还会被说用心 @_@
--
钱锺书:
说出来的话
http://www.psmonkey.org
比不上不说出来的话
Java 版 cookcomic 版
只影射着说不出来的话
and more......
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.25.30.36
1F:→ cyclone350:了解 01/31 08:10