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

首頁 > 編程 > Java > 正文

深入剖析java中String、StringBuffer、StringBuilder的區別

2019-11-26 14:20:25
字體:
來源:轉載
供稿:網友

java中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對方法加了同步鎖或者對調用的方法加了同步鎖,所以是線程安全的。看如下源碼:

public synchronized StringBuffer reverse() {  super.reverse();  return this;}public int indexOf(String str) {  return indexOf(str, 0);    //存在 public synchronized int indexOf(String str, int fromIndex) 方法}

StringBuilder并沒有對方法進行加同步鎖,所以是非線程安全的。

3. StringBuilder與StringBuffer共同點

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

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

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

最后,如果程序不是多線程的,那么使用StringBuilder效率高于StringBuffer。

以上這篇深入剖析java中String、StringBuffer、StringBuilder的區別就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌兰县| 扎鲁特旗| 左云县| 中阳县| 茂名市| 社旗县| 日土县| 峨山| 台湾省| 乐亭县| 神农架林区| 大同市| 黄骅市| 汪清县| 南汇区| 恩施市| 南康市| 怀仁县| 桓台县| 磴口县| 阳新县| 威远县| 金山区| 舞钢市| 拉萨市| 乐安县| 丹凤县| 盐池县| 山丹县| 加查县| 夏河县| 山阳县| 洛隆县| 乌兰浩特市| 泰和县| 策勒县| 图木舒克市| 大埔区| 甘肃省| 兴文县| 泰安市|