摘要:中有三個類可以對字符進行操作是進行單個字符操作的類。類中的方法偏重于對字符串的變化,例如追加插入和刪除等,這個也是和類的主要區(qū)別。類屬于一種輔助類,可預先分配指定長度的內(nèi)存塊建立一個字符串緩沖區(qū)。
前言
String和StringBuffer都是java中關(guān)于字符操作的類
尤其String,經(jīng)常看到類似這樣的賦值代碼 String str = "Hello World",看起來就好像int一樣以為是java的基本數(shù)據(jù)類型,其實不是,String是一個類,是一個特殊的類,可以像基本數(shù)據(jù)類型一樣直接賦值。
java中有三個類可以對字符進行操作:
(1)Character 是進行單個字符操作的類。 (2)String 對一串字符進行操作的不可變類。 (3)StringBuffer 也是對一串字符進行操作,但是可變類。Java中String和StringBuffer類區(qū)別
StringBuffer對象的內(nèi)容可以修改;而String對象一旦產(chǎn)生后就不可以被修改,重新賦值,其實是兩個對象。
String是對象,不是原始類型;為不可變對象,一旦被創(chuàng)建,就不能修改其值。
對于已經(jīng)存在的String對象的修改,實際上是重新創(chuàng)建一個新的對象,然后把新的值保存進去。
String是final類,不能被繼承。
StringBuffer是一個可變對象,當對它修改的時候,不會像String那樣重新建立對象,它只能通過構(gòu)造函數(shù)來建立。對象被創(chuàng)立后,會分配內(nèi)存空間,并初始保存一個null。向StringBuffer中賦值的時候,可以通過它的append方法:obj.append("hello");
字符串連接操作中StringBuffer的效率比String高。
如果程序中需要對字符串進行頻繁的修改連接操作的話,使用StringBuffer性能會更高。
在String類中,沒有用來改變已有字符串中的某個字符的方法,由于不能改變一個java字符串中的某個多帶帶字符,所以在JDK文檔中稱String類的對象是不可改變的。
然而,不可變的字符串具有一個很大的優(yōu)點:編譯器可以把字符串設置為共享的。
StringBuffer是線程安全的,在多線程程序中也可以很方便的進行使用,但是程序執(zhí)行效率相對來說就要稍微慢一些。
StringBuffer類中的方法偏重于對字符串的變化,例如追加、插入和刪除等,這個也是StringBuffer和String類的主要區(qū)別。
String與StringBuffer連接字符串比較
String str = new String("Hello World");str += "hello world"; 此字符串連接的處理過程:
(1)建立一個StringBuffer; (2)調(diào)用append()方法; (3)最后StringBuffer調(diào)用toString()給String重新賦值 (4)這樣看來,String的連接操作,比StringBuffer多了一些操作,效率上就會打折扣。 (5)并且,由于String是不可變對象,每次重新賦值都會重新創(chuàng)建新的對象,那么原來的對象就沒用了,就要被垃圾回收,也影響性能。
StringBuffer類屬于一種輔助類,可預先分配指定長度的內(nèi)存塊建立一個字符串緩沖區(qū)。這樣使用StringBuffer類的append方法追加字符,比String使用“+”操作符添加字符到一個已經(jīng)存在的字符串后面有效率的多。
使用“+”操作符每一次將字符添加到一個字符串中去時,字符串對象都需要尋找一個新的內(nèi)存空間來容納更大的字符串,這無疑是一個非常消耗時間的操作。添加多個字符就意味著要一次又一次的的對字符串重新分配內(nèi)存。使用StringBuffer就避免了這個問題。
參考鏈接https://www.cnblogs.com/fguoz...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/77018.html
摘要:和它們都是可變的字符串,不過它們之間的區(qū)別是初中級面試出現(xiàn)幾率十分高的一道題。區(qū)別線程安全線程安全,線程不安全。區(qū)別性能既然是線程安全的,它的所有公開方法都是同步的,是沒有對方法加鎖同步的,所以毫無疑問,的性能要遠大于。 StringBuffer 和 StringBuilder 它們都是可變的字符串,不過它們之間的區(qū)別是 Java 初中級面試出現(xiàn)幾率十分高的一道題。這么簡單的一道題,棧...
摘要:創(chuàng)建字符串教程字符串長度用于獲取有關(guān)對象的信息的方法稱為訪問器方法。類在中被提出,它和之間的最大不同在于的方法不是線程安全的不能同步訪問。然而在應用程序要求線程安全的情況下,則必須使用類。 一般地,當需要使用數(shù)字的時候,我們通常使用內(nèi)置數(shù)據(jù)類型,如:byte、int、long、double 等。 在實際開發(fā)過程中,我們經(jīng)常會遇到需要使用對象,而不是內(nèi)置數(shù)據(jù)類型的情形。為了解決這個問題,...
摘要:事實上,所謂的同步就是指阻塞式操作,而異步就是非阻塞式操作。中可以通過設值注入方法注入和構(gòu)造器注入實現(xiàn),推薦使用的方式為設值注入。 寫在前面 春天來了,萬物復蘇的季節(jié)到了. 許多程序猿安奈不住生理需求,我要漲工資,我要跳槽. 畢竟金三銀四嘛. 那么要從眾多的面試者中獲得求職機會,我們就要面對很多的面試題. 程序猿是最煩面試題的.面試的公司也煩,面試的人也煩. 但是沒辦法.面試的人魚龍混...
摘要:使用可以方便的對字符串進行拼接。該方法使用進行聲明,說明是一個線程安全的方法。所以,阿里巴巴開發(fā)手冊建議循環(huán)體內(nèi),字符串的連接方式,使用的方法進行擴展。但是,還要強調(diào)的是如果不是在循環(huán)體中進行字符串拼接的話,直接使用就好了。 摘要: 學習阿里巴巴Java開發(fā)手冊。 原文:為什么阿里巴巴不建議在for循環(huán)中使用+進行字符串拼接 微信公眾號:Hollis Fundebug經(jīng)授權(quán)轉(zhuǎn)載,...
摘要:與都繼承自類,在中也是使用字符數(shù)組保存字符串,,這兩種對象都是可變的。采用字節(jié)碼的好處語言通過字節(jié)碼的方式,在一定程度上解決了傳統(tǒng)解釋型語言執(zhí)行效率低的問題,同時又保留了解釋型語言可移植的特點。 String和StringBuffer、StringBuilder的區(qū)別是什么?String為什么是不可變的? String和StringBuffer、StringBuilder的區(qū)別 可變性...
閱讀 2233·2019-08-30 15:53
閱讀 2463·2019-08-30 12:54
閱讀 1208·2019-08-29 16:09
閱讀 734·2019-08-29 12:14
閱讀 761·2019-08-26 10:33
閱讀 2486·2019-08-23 18:36
閱讀 2962·2019-08-23 18:30
閱讀 2125·2019-08-22 17:09