国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

開發(fā)實戰(zhàn)細(xì)節(jié)之——關(guān)于整型轉(zhuǎn)換為字符串類型的性能與實現(xiàn)分析

2019-11-14 15:20:31
字體:
供稿:網(wǎng)友

細(xì)節(jié)決定成敗,開發(fā)中往往從一些細(xì)節(jié)就可以看出一個程序員的開發(fā)水準(zhǔn),下面我就給大家分享一下開發(fā)中最最常見的int轉(zhuǎn)換為String類型的方法及其性能解析。

一般大家最常用的方法有

方法一:String s1 = String.valueOf(i); 

方法二:String s2 = i+"";  

不知道有沒有人用這種方法呢?

方法三:String s3 = Integer.toString(i);

繼續(xù)往下看之前,大家先猜測一下這三種方法哪種方法的效率最高,耗時最短,對內(nèi)存消耗最小?相信結(jié)果會令你大吃一驚!

話不多說,直接上代碼,用事實說話。

 

運行結(jié)果如下:

結(jié)果是不是大跌眼鏡啊?沒想到我們最常用的i+""的性能竟然如此之差!而性能最好的竟然是沒人怎么用的toString(i);為什么會這樣呢?經(jīng)過堆棧分析發(fā)現(xiàn):

String.valueOf(i)的方法調(diào)用的竟然時第三種方法:Integer.toString(i),多此調(diào)試后發(fā)現(xiàn)他們的耗時比基本保持在20:8,那么toString(i)的內(nèi)部又是怎樣實現(xiàn)的呢?

下面是Integer.toString(i)的實現(xiàn)代碼:

其中stringSize(i)又做了什么事呢?經(jīng)過進一步跟蹤發(fā)現(xiàn)

而sizeTable[]又是一個怎樣的數(shù)組呢?繼續(xù)往下看,

原來在調(diào)用toString(i)的時候,如果會判斷i是否是負(fù)數(shù),如果是負(fù)數(shù)就將其求反為正數(shù),然后會根據(jù) sizeTable數(shù)組來 判斷 i 的位數(shù)并返回創(chuàng)建一個比i的長度+1的字符數(shù)組,比如i=11,那么size就是3,然后就會創(chuàng)建一個3位的字符數(shù)組。那么問題來了,getChars()有是干什么的呢?

仔細(xì)分析代碼發(fā)現(xiàn),這個函數(shù)的功能就是將int型的i從右向左(即從個位數(shù)開始)填充到字符數(shù)組buf中。至此方法一String.valueOf(i)和方法三Integer.toString(i)分析完畢。

由上可見,方式二 i+"" 是最耗時耗內(nèi)存的方法,之所以寫這篇文章是因為我在看一段視頻的時候以為老師說他以前剛?cè)肼毜臅r候就是用這種方法從而項目中出現(xiàn)大量的+"",結(jié)果是被項目經(jīng)理批評了一頓。所以小伙伴們,如果你還在用方法二就趕快更正過來吧!

那么方法二為什么會這么耗時呢?

因為每 +"" 一次,就會調(diào)用一次 

public StringBuffer() {
  super(16);
}

方法,這就意味著每 +"" 一次,就會在內(nèi)存中實例化一個StringBuffer()對象,原因是String類型是final的,其內(nèi)容是不可變的,所以每次改變其值就要重新new一個對象,如果一個項目中大量使用該方法,不耗時耗內(nèi)存才怪呢。

個人總結(jié)看到這里相信大家都知道了到底哪種方法才是最有效的,int類型轉(zhuǎn)為String類型時使用Integer.toString(i)或String.valueOf(i)方法會比+""高效節(jié)能的多。希望閱讀此文能提升一下讀者的逼格,如果有哪個地方我分析的不對或者有什么更好的建議或更實用的細(xì)節(jié)還請小伙伴們不吝賜教!

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 丹棱县| 陕西省| 通州区| 襄樊市| 大新县| 平江县| 玉环县| 普洱| 杨浦区| 柞水县| 赤峰市| 彩票| 乐至县| 吉安市| 水富县| 富平县| 专栏| 昌宁县| 临安市| 海淀区| 东方市| 时尚| 新田县| 宝坻区| 连江县| 保亭| 中西区| 山西省| 昆山市| 五华县| 宁德市| 柳州市| 浮山县| 会昌县| 凤台县| 贡嘎县| 新巴尔虎右旗| 兴和县| 正定县| 闵行区| 衡南县|