亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

StringBuffer與StringBuilder原理與區別

2019-11-14 15:24:34
字體:
來源:轉載
供稿:網友
其實只要找下Google大神就有答案了:StringBuffer 與 StringBuilder 中的方法和功能完全是等價的,只是StringBuffer 中的方法大都采用了 synchronized 關鍵字進行修飾,因此是線程安全的,而 StringBuilder 沒有這個修飾,可以被認為是線程不安全的。 
 
為了更好的理解上述的答案,還是直接看StringBuffer與StringBuilder的源碼實現比較實在,作為一個程序猿,“有疑問,看源碼”才是正道,我可以負責任的說,當然了得有條件才行!
 
jdk的實現中StringBuffer與StringBuilder都繼承自AbstractStringBuilder,對于多線程的安全與非安全看到StringBuffer中方法前面的一堆synchronized就大概了解了。
 
這里隨便講講AbstractStringBuilder的實現原理:我們知道使用StringBuffer等無非就是為了提高java中字符串連接的效率,因為直接使用+進行字符串連接的話,jvm會創建多個String對象,因此造成一定的開銷。AbstractStringBuilder中采用一個char數組來保存需要append的字符串,char數組有一個初始大小,當append的字符串長度超過當前char數組容量時,則對char數組進行動態擴展,也即重新申請一段更大的內存空間,然后將當前char數組拷貝到新的位置,因為重新分配內存并拷貝的開銷比較大,所以每次重新申請內存空間都是采用申請大于當前需要的內存空間的方式,這里是2倍。
 
 
接下來,玩些好玩的!
在Google中出來了這么一些信息:
 
    StringBuffer 始于 JDK 1.0 
    StringBuilder 始于 JDK 1.5 

    從 JDK 1.5 開始,帶有字符串變量的連接操作(+),JVM 內部采用的是 
    StringBuilder 來實現的,而之前這個操作是采用 StringBuffer 實現的。
 
我們通過一個簡單的程序來看其執行的流程:
 
清單1 Buffer.java
[java] view plaincopy
  1. public class Buffer {  
  2.      public static void main(String[] args) {  
  3.             String s1 = "aaaaa";  
  4.             String s2 = "bbbbb";  
  5.             String r = null;  
  6.             int i = 3694;  
  7.             r = s1 + i + s2;   
  8.               
  9.             for(int j=0;i<10;j++){  
  10.                 r+="23124";  
  11.             }  
  12.      }  
  13. }  
 
使用命令javap -c Buffer查看其字節碼實現:
 
清單2 Buffer類字節碼
 
將清單1和清單2對應起來看,清單2的字節碼中ldc指令即從常量池中加載“aaaaa”字符串到棧頂,istore_1將“aaaaa”存到變量1中,后面的一樣,sipush是將一個短整型常量值(-32768~32767)推送至棧頂,這里是常量“3694”,更多的Java指令集請查看另一篇文章“Java指令集”。
 
讓我們直接看到13,13~17是new了一個StringBuffer對象并調用其初始化方法,20~21則是先通過aload_1將變量1壓到棧頂,前面說過變量1放的就是字符串常量“aaaaa”,接著通過指令invokevirtual調用StringBuffer的append方法將“aaaaa”拼接起來,后續的24~30同理。最后在33調用StringBuffer的toString函數獲得String結果并通過astore存到變量3中。
 
看到這里可能有人會說,“既然JVM內部采用了StringBuffer來連接字符串了,那么我們自己就不用用StringBuffer,直接用”+“就行了吧!“。是么?當然不是了。俗話說”存在既有它的理由”,讓我們繼續看后面的循環對應的字節碼。
 
37~42都是進入for循環前的一些準備工作,37,38是將j置為1。44這里通過if_icmpge將j與10進行比較,如果j大于10則直接跳轉到73,也即return語句退出函數;否則進入循環,也即47~66的字節碼。這里我們只需看47到51就知道為什么我們要在代碼中自己使用StringBuffer來處理字符串的連接了,因為每次執行“+”操作時jvm都要new一個StringBuffer對象來處理字符串的連接,這在涉及很多的字符串連接操作時開銷會很大。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线亚洲在线| 久久精品久久久久电影| 亚洲色图13p| 91精品国产91久久久久久最新| 亚洲激情在线观看视频免费| 国产精品极品美女粉嫩高清在线| 日韩成人激情在线| 欧美日韩一区二区三区在线免费观看| 国产欧美va欧美va香蕉在线| 欧美亚洲另类激情另类| 国产一区二区三区直播精品电影| 中文在线资源观看视频网站免费不卡| 日韩精品中文在线观看| 亚洲人精选亚洲人成在线| 亚洲永久在线观看| 日韩电影视频免费| 欧美激情乱人伦一区| 亚洲国产99精品国自产| 日韩精品一区二区三区第95| 中文字幕日韩欧美在线视频| 日韩av一卡二卡| 亚洲一区中文字幕| 91夜夜未满十八勿入爽爽影院| 国产精品揄拍一区二区| 久久五月情影视| 久久久午夜视频| 亚洲va电影大全| 国产在线观看精品一区二区三区| 一区二区三区无码高清视频| 欧美大片免费观看在线观看网站推荐| 国产精品jvid在线观看蜜臀| 国产在线精品播放| 欧美巨大黑人极品精男| 国产日韩在线视频| 日本韩国欧美精品大片卡二| 亚洲国产精品悠悠久久琪琪| 热99精品只有里视频精品| 夜夜嗨av一区二区三区免费区| 精品免费在线观看| 欧美大荫蒂xxx| 久久久人成影片一区二区三区观看| 日韩精品久久久久久福利| 91精品国产色综合久久不卡98| 久久久久久久久中文字幕| 538国产精品一区二区免费视频| 欧美香蕉大胸在线视频观看| 欧美亚洲国产视频小说| 国内精品在线一区| 欧美精品情趣视频| 欧美日韩不卡合集视频| 欧美在线视频一二三| 亚洲欧美精品一区| 亚洲国产古装精品网站| 国产999在线观看| 日韩精品中文字幕有码专区| 欧美精品久久久久久久免费观看| 亚洲黄色av女优在线观看| 国产精品久久久久av免费| 欧美老肥婆性猛交视频| 国产美女扒开尿口久久久| 日韩亚洲精品电影| 综合欧美国产视频二区| 成人免费网站在线| 欧美激情在线狂野欧美精品| 欧美成人精品三级在线观看| 久久久久久久久久国产| 久热99视频在线观看| 久热爱精品视频线路一| 九九久久久久久久久激情| 国产美女搞久久| 国产精品一区二区三区成人| 国产精品999999| 亚洲香蕉成视频在线观看| 久久免费视频在线| 精品久久久在线观看| 欧美国产亚洲视频| 国产亚洲视频在线| 亚洲新中文字幕| 国产欧美一区二区三区四区| 日本sm极度另类视频| 91高清视频免费观看| 奇米4444一区二区三区| 欧美日韩成人精品| 国产精品自拍偷拍视频| 91亚洲国产成人久久精品网站| 欧美三级xxx| 欧美丰满少妇xxxxx做受| 欧美精品免费在线| 亚洲老头同性xxxxx| 精品毛片三在线观看| 久久69精品久久久久久国产越南| 色黄久久久久久| 国产精品久久久久久久一区探花| 欧美大成色www永久网站婷| 国产一区二区久久精品| 久久亚洲成人精品| 日本国产欧美一区二区三区| 97**国产露脸精品国产| 亚洲激情第一页| 久久精品免费电影| 日韩一区二区福利| 亚洲三级免费看| 国产精品一区二区三| 精品日韩中文字幕| 日韩av色综合| 亚洲激情视频网站| 日韩在线视频观看| 久久精品久久精品亚洲人| 97久久精品视频| 精品中文视频在线| 亚洲国产欧美一区二区三区同亚洲| 欧美日韩一区二区三区| 最近更新的2019中文字幕| 久久精品99久久久久久久久| 国产精品久久久久久久午夜| 久久久精品影院| 国产91色在线|| 日韩精品www| 国产精品网红福利| 久久久亚洲影院你懂的| 成人免费大片黄在线播放| 国产精品香蕉在线观看| 国产在线精品播放| 一区三区二区视频| 在线观看亚洲区| 97国产一区二区精品久久呦| 国产精品久久久久久久久久| 欧美日韩高清区| 亚洲一区二区久久久| 91精品国产综合久久久久久蜜臀| 爱福利视频一区| 亚洲精品白浆高清久久久久久| 精品国偷自产在线视频99| 亚洲电影成人av99爱色| 国产精品亚洲精品| 国产成人小视频在线观看| 日韩av在线导航| 亚洲色图狂野欧美| 亚洲午夜国产成人av电影男同| 中文日韩电影网站| 国产一区二区三区免费视频| 国产91成人video| 欧美性猛交xxx| 91产国在线观看动作片喷水| 久久精品国产亚洲精品2020| 国产日本欧美一区二区三区在线| 成人黄色av网站| 欧美精品在线第一页| 亚洲热线99精品视频| 国产精品久久不能| 国内精品久久久久影院优| 一区二区欧美在线| 国产精品久久久久久久久久东京| 九九热精品视频| 亚洲精品自产拍| 成人国产在线激情| 日本在线观看天堂男亚洲| 日韩av在线精品| 色综合久久中文字幕综合网小说| 日韩**中文字幕毛片| 国产精品久久久久91| 久久久精品久久| 久久精品国产亚洲精品2020| 亚洲国产欧美一区二区丝袜黑人|