日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA中字符串连接效率的测试(续)

發布時間:2025/7/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA中字符串连接效率的测试(续) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原:http://www.54xue.com/w/39/n-10839.html?

分別測試了n=10,100,500,1000,5000,10000,20000的時候,三個對象連接字符串所花費的時間,做了個簡單統計,得到如下數據:

連接次數(n) 所需時間(單位毫秒)
String StringBuffer StringBuilder
10 0 0 0
100 0 0 0
500 31 16 0
1000 63 31 16
5000 781 63 47
10000 7547 63 62
20000 62984 94 63
測試環境:ECLIPSE
由上邊的圖表結果對比,可以清楚的看出,為什么大家都鼓勵用StringBuffer連接字符串了。在連接次數少的情況下,String的低效率表現并不是很突出,但是一旦連接次數多的時候,性能影響是很大的,String進行2萬次字符串的連接,大約需要1分鐘時間,而StringBuffer只需要94毫秒,相差接近500倍以上。而StringBuffer和StringBuilder差別并不大,StringBuilder比StringBuffer稍微快點,我想是因為StringBuffer是線程序安全的,StringBuilder不是線程序安全的,所以StringBuffer稍微慢點。 但是為什么String如此慢呢,分下如下簡單片段
String result="";
result+="ok";
這段代碼看上去好像沒有什么問題,但是需要指出的是其性能很低,原因是java中的String
類不可變的(immutable),這段代碼實際的工作過程會是如何的呢?通過使用javap工具我
們可以知道其實上面的代碼在編譯成字節碼的時候等同的源代碼是:
String result="";
StringBuffer temp=new StringBuffer(); temp.append(result); temp.append("ok"); result=temp.toString();
短短的兩個語句怎么呢變成這么多呢?問題的原因就在String類的不可變性上,而java程序為了方便簡單的字符串使用方式對+操作符進行了重載,而這個重載的處理可能因此誤導很多對javaString的使用。所以,如果你對字符串中的內容經常進行操作,特別是內容要修改時,那么使用StringBuffer,如果最后需要String,那么使用StringBuffertoString()方法好了。但是StringBuilder的實例用于多個線程是不安全的。如果需要這樣的同步,則建議使用StringBuffer,因為StringBuffer是線程安全的。在大多數非多線程的開發中,為了提高效率,可以采用StringBuilder代替StringBuffer,速度更。

轉載于:https://blog.51cto.com/zdsfwy/862161

總結

以上是生活随笔為你收集整理的JAVA中字符串连接效率的测试(续)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。