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

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

string stringbuffer stringbuilder區別

2019-11-08 01:35:43
字體:
來源:轉載
供稿:網友

String、StringBuffer、StringBuilder是編程中經常使用的字符串類,他們之間的區別也是經常在面試中會問到的問題。現在總結一下,看看他們的不同與相同,歡迎補充。

1.可變與不可變

  String類中使用字符數組保存字符串,如下就是,因為有“final”修飾符,所以可以知道string對象是不可變的。

    PRivate final char value[];

  StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字符數組保存字符串,如下就是,可知這兩種對象都是可變的。

    char[] value;

2.是否多線程安全

  String中的對象是不可變的,也就可以理解為常量,顯然線程安全。

  AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。

  StringBuffer對方法加了同步鎖或者對調用的方法加了同步鎖,所以是線程安全的。看如下源碼

復制代碼 1 public synchronized StringBuffer reverse() { 2 super.reverse(); 3 return this; 4 } 5 6 public int indexOf(String str) { 7 return indexOf(str, 0); //存在 public synchronized int indexOf(String str, int fromIndex) 方法 8 } 復制代碼   StringBuilder并沒有對方法進行加同步鎖,所以是非線程安全的。

3.StringBuilder與StringBuffer共同點

  StringBuilder與StringBuffer有公共父類AbstractStringBuilder(抽象類)。

  抽象類與接口的其中一個區別是:抽象類中可以定義一些子類的公共方法,子類只需要增加新的功能,不需要重復寫已經存在的方法;而接口中只是對方法的申明和常量的定義。

  StringBuilder、StringBuffer的方法都會調用AbstractStringBuilder中的公共方法,如super.append(…)。只是StringBuffer會在方法上加synchronized關鍵字,進行同步。

  最后,如果程序不是多線程的,那么使用StringBuilder效率高于StringBuffer。wn編輯器寫博客




發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 拉孜县| 酒泉市| 怀宁县| 阿荣旗| 牡丹江市| 锦屏县| 蕉岭县| 巴楚县| 新巴尔虎左旗| 体育| 望都县| 二连浩特市| 山阳县| 高雄县| 汕尾市| 临西县| 卓尼县| 江源县| 平潭县| 乐昌市| 金乡县| 奉化市| 大邑县| 芜湖县| 麦盖提县| 延长县| 古浪县| 淮滨县| 凤庆县| 汶川县| 高雄市| 巴楚县| 内黄县| 衡阳县| 大英县| 成安县| 临清市| 壤塘县| 磴口县| 寻乌县| 青川县|