Re: [問題] int取個別數值問題..

看板java作者 (痞子軍團團長)時間11年前 (2013/01/31 01:31), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串8/8 (看更多)
※ 引述《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
文章代碼(AID): #1H2LZPxj (java)
討論串 (同標題文章)
文章代碼(AID): #1H2LZPxj (java)