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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

String, StringBuffer,StringBuilder的區(qū)別

2019-11-08 18:38:45
字體:
供稿:網(wǎng)友

String 字符串常量 StringBuffer 字符串變量(線程安全) StringBuilder 字符串變量(非線程安全)

String 類代表字符串。java 程序中的所有字符串字面值(如 “abc” )都是String類的對象。字符串是常量;它們的值在創(chuàng)建之后不能改變。所以可以共享它們。

StringBuffer是字符串緩存區(qū),它的內(nèi)容可以被修改,長度也可以改變,StringBuffer類是線程安全的,也就是說多個線程可以安全的訪問StringBuffer對象。

StringBuilder與StringBuffer類似,都是字符串緩java中String、StringBuffer、StringBuilder是編程中經(jīng)常使用的字符串類,他們之間的區(qū)別也是經(jīng)常在面試中會問到的問題。現(xiàn)在總結(jié)一下,看看他們的不同與相同。

1.可變與不可變 String類中使用字符數(shù)組保存字符串,如下就是,因為有“final”修飾符,所以可以知道string對象是不可變的。 PRivate final char value[]; String 為不可變對象,一旦被創(chuàng)建,就不能修改它的值. . 對于已經(jīng)存在的String對象的修改都是重新創(chuàng)建一個新的對象,然后把新的值保存進(jìn)去. StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字符數(shù)組保存字符串,如下就是,可知這兩種對象都是可變的。 char[] value; StringBuffer:是一個可變對象,當(dāng)對他進(jìn)行修改的時候不會像String那樣重新建立對象 , 它只能通過構(gòu)造函數(shù)來建立, 如: StringBuffer sb = new StringBuffer(); 不能通過賦值符號對他進(jìn)行付值. , 如 sb = “welcome to here!”;//error 對象被建立以后,在內(nèi)存中就會分配內(nèi)存空間,并初始保存一個null.向StringBuffer中賦值的時候可以通過它的append方法. sb.append(“hello”);

2.是否多線程安全 String中的對象是不可變的,也就可以理解為常量, 顯然線程安全 。 AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。 StringBuffer對方法加了同步鎖或者對調(diào)用的方法加了同步鎖,所以是 線程安全的 。看如下源碼

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并沒有對方法進(jìn)行加同步鎖,所以是 非線程安全的 。

3.StringBuilder與StringBuffer共同點 StringBuilder與StringBuffer有公共父類AbstractStringBuilder( 抽象類 )。 抽象類與接口的其中一個區(qū)別是:抽象類中可以定義一些子類的公共方法,子類只需要增加新的功能,不需要重復(fù)寫已經(jīng)存在的方法;而接口中只是對方法的申明和常量的定義。 StringBuilder、StringBuffer的方法都會調(diào)用AbstractStringBuilder中的公共方法,如super.append(…)。只是StringBuffer會在方法上加synchronized關(guān)鍵字,進(jìn)行同步。 最后,如果程序不是多線程的,那么使用StringBuilder效率高于StringBuffer。

效率比較 String < StringBuffer < StringBuilder,

但是在String S1 =“This is only a”+“simple”+“test”時,String效率最高。沖區(qū),但StringBuilder不是線程安全的,如果你只是在單線程中使用字符串緩沖區(qū),那么StringBuilder的效率會更高些。值得注意的是StringBuilder是在JDK1.5版本中增加的。以前版本的JDK不能使用該類。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 屏南县| 仁寿县| 黎平县| 临洮县| 秀山| 静安区| 哈密市| 大洼县| 阳曲县| 类乌齐县| 凭祥市| 洪江市| 麦盖提县| 平南县| 彭水| 烟台市| 惠东县| 庆城县| 兴山县| 福清市| 华池县| 正镶白旗| 衡阳县| 香格里拉县| 尚志市| 黎城县| 内江市| 中阳县| 阳泉市| 福海县| 凤凰县| 博乐市| 康平县| 溆浦县| 怀化市| 伊宁市| 康马县| 湘乡市| 伊宁县| 汪清县| 房产|