JAVA中字符串连接效率的测试(续)
生活随笔
收集整理的這篇文章主要介紹了
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 | |||
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程序為了方便簡單的字符串使用方式對+操作符進行了重載,而這個重載的處理可能因此誤導很多對java中String的使用。所以,如果你對字符串中的內容經常進行操作,特別是內容要修改時,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法好了。但是StringBuilder的實例用于多個線程是不安全的。如果需要這樣的同步,則建議使用StringBuffer,因為StringBuffer是線程安全的。在大多數非多線程的開發中,為了提高效率,可以采用StringBuilder代替StringBuffer,速度更。
轉載于:https://blog.51cto.com/zdsfwy/862161
總結
以上是生活随笔為你收集整理的JAVA中字符串连接效率的测试(续)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fatal error:SQL Serv
- 下一篇: Outlook 2003中各个数据存储和