Re: [問題] int取個別數值問題..
※ 引述《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
→
01/31 08:10, , 1F
01/31 08:10, 1F
討論串 (同標題文章)
完整討論串 (本文為第 8 之 8 篇):
問題
4
11