java中字符串的操作類

在java編程中字符串屬于對象晚顷,StringBuilder飘千、 StringBuffer、 String是java中常用的對字符串操作的類,那么他們什么不同呢菠剩?

String

String 類以及它的value都是final修飾的,表明String類是無法被繼承的族阅,value是無法被改寫的东跪,不存在擴容。String由于它的不可變性鸣哀,對其進行拼接架忌、截取等操作都會產(chǎn)生新的對象,頻繁操作字符串效率低下我衬,因中間對象太多叹放,造成內(nèi)存空間浪費(JDK8開始饰恕,String的操作會被編譯成StringBuilder)。

創(chuàng)建一個字符串時井仰,首先會檢查常量池中是否有值相同的字符串對象埋嵌,如果有就直接返回引用,不會創(chuàng)建字符串對象俱恶,如果沒有則新建字符串對象雹嗦,返回對象引用,并且將新創(chuàng)建的對象放入池中合是。但是通過new方法創(chuàng)建的String對象是直接在堆中創(chuàng)建新對象了罪。

  例:
   String str = "abdc";
     執(zhí)行以上代碼,會先檢查在字符串常量池里是否有"abdc"對象聪全,如果有str直接指向該引用泊藕,如果
  沒有就創(chuàng)建一個"abdc"對象,再將str指向該引用荔烧。
   str = "hello";
      這時str的值改變了吱七,這里的改變是str指向的引用變了,首先會檢查字符串常量池中是否有"hello"
  對象鹤竭,沒有就創(chuàng)建一個該對象踊餐,然后將str指向該引用
   
   String str1 = new String(“abdc”);
     執(zhí)行以上代碼臀稚,會生成兩個對象吝岭,一個是會檢查常量池中是否有"abdc"的對象,沒有就創(chuàng)建一個并
  放入常量池吧寺,另一個是會在堆中創(chuàng)建一個"abdc"對象窜管,str1就指向堆中的"abdc"對象。

java為解決String類大量操作字符串效率低下問題稚机,引入率StringBuilder和StringBuffer兩個類幕帆。

StringBuilder

StringBuilder類內(nèi)部維護的是可變長度的char[],存在擴容赖条,其append拼接字符串方法內(nèi)部調(diào)用System的native方法失乾,進行數(shù)組的拷貝,不會重新生成新的StringBuilder對象纬乍。它是非線程安全的字符串操作類碱茁,其每次調(diào)用toString方法而重新生成的String對象,不會共享StringBuilder對象內(nèi)部的char[]仿贬,會進行一次char[]的copy操作纽竣。

StringBuffer 類內(nèi)部維護可變長度char[],基本上與String一致,區(qū)別在于其是線程安全的字符串操作類蜓氨,大部分方法都采用了Synchronized關鍵字修改聋袋,以此來實現(xiàn)在多線程下的字符串操作的安全性。其toString方法而重新生成的String對象语盈,會共享StringBuffer對象中的toStringCache屬性舱馅,但是每次的StringBuffer對象修改,都會置空該屬性的值刀荒。

繼承關系

   String實現(xiàn)了CharSequence和Serializable 
   StringBuffer和StringBuilder都繼承AbstractStringBuilder代嗤,而AbstractStringBuilder
實現(xiàn)了CharSequence和Appendable

相關知識
==和equals對比

== :      
   基本數(shù)據(jù)類型(byte,short缠借,char干毅,int,float泼返,double硝逢,long,boolean):比較的是值
是否相同
   引用數(shù)據(jù)類型:比較的是地址值是否相同
equals的作用:
   引用類型默認比較的是地址值绅喉,但是在一些類庫中已經(jīng)重寫了該方法渠鸽,重寫該方法一般用來比較對象
的成員變量值是否相同,如String柴罐, Integer徽缚, Date等類中,所以它們不再是比較類在堆中的地址了革屠。

例:
String str1 = new String(”fd”);
String str2 = new String(”fd”);
str1==str2;的值是false凿试,因為==比較的是對象的地址,他們的地址是不同的似芝,值相同那婉。

String str1 = ”fd”;
String str2 = ”fd”;
str1==str2;的值是true,因為他們都是指向字符串常量池中同一個對象党瓮,所以是相同的地址详炬。

總結(jié):

定長不變字符串用String

可變單線程字符串用StrngBuiler

可變多線程字符串用StringBuffer。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寞奸,一起剝皮案震驚了整個濱河市痕寓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝇闭,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硬毕,死亡現(xiàn)場離奇詭異呻引,居然都是意外死亡,警方通過查閱死者的電腦和手機吐咳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門逻悠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來元践,“玉大人,你說我怎么就攤上這事童谒〉ヅ裕” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵饥伊,是天一觀的道長象浑。 經(jīng)常有香客問我,道長琅豆,這世上最難降的妖魔是什么愉豺? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮茫因,結(jié)果婚禮上蚪拦,老公的妹妹穿的比我還像新娘。我一直安慰自己冻押,他們只是感情好驰贷,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洛巢,像睡著了一般括袒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狼渊,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天箱熬,我揣著相機與錄音,去河邊找鬼狈邑。 笑死城须,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的米苹。 我是一名探鬼主播糕伐,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蘸嘶!你這毒婦竟也來了良瞧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤训唱,失蹤者是張志新(化名)和其女友劉穎褥蚯,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體况增,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡赞庶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片歧强。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡澜薄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出摊册,到底是詐尸還是另有隱情肤京,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布茅特,位于F島的核電站忘分,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏温治。R本人自食惡果不足惜饭庞,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望熬荆。 院中可真熱鬧舟山,春花似錦、人聲如沸卤恳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽突琳。三九已至若债,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拆融,已是汗流浹背蠢琳。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留镜豹,地道東北人傲须。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像趟脂,于是被迫代替她去往敵國和親泰讽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 從網(wǎng)上復制的昔期,看別人的比較全面已卸,自己搬過來,方便以后查找硼一。原鏈接:https://www.cnblogs.com/...
    lxtyp閱讀 1,346評論 0 9
  • 包裝類 包裝類是把八大基本數(shù)據(jù)類型封裝到一個類中累澡,并提供屬性和方法。 是為了更方便的操作基本數(shù)據(jù)類型般贼,而不是取代基...
    什么時候養(yǎng)貓閱讀 345評論 0 0
  • 《Java從小白到大牛》紙質(zhì)版已經(jīng)上架了3岢!人芽! 由字符組成的一串字符序列望几,稱為“字符串”,在前面的章節(jié)中也多次用到...
    tony關東升閱讀 812評論 0 2
  • 1萤厅、什么是 Java 中的字符串 在程序開發(fā)中字符串無處不在橄抹,如用戶登陸時輸入的用戶名、密碼等使用的就是字符串惕味。其...
    夏沫xx閱讀 1,259評論 0 2
  • 以前給學生輔導高中物理,上一個初升高的培訓班禀倔,出了一道題榄融,很經(jīng)典的題,“5秒內(nèi)汽車從靜止開始跑了20米救湖,求5秒末汽...
    茹果君閱讀 1,097評論 8 53