一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java 中 String,StringBuffer 和 StringBuilder 的區(qū)別及用法

Java 中 String,StringBuffer 和 StringBuilder 的區(qū)別及用法

2020-08-25 11:21Java教程網(wǎng) Java教程

這篇文章主要介紹了Java 中 String,StringBuffer 和 StringBuilder 的區(qū)別及用法的相關(guān)資料,需要的朋友可以參考下

1 簡介

在 Java 語言中,共有 8 個基本的數(shù)據(jù)類型,分別為:byte、short、int、long、float、double、boolean 和 char,其中 char 類型用于表示單個字符,例如 a、b、c 、A、B、C、& 這些大小寫字母或者特殊字符等等。在實(shí)際的編程中,單個的字符并沒有我們想象中用的那么頻繁,反而是多個字符組成的“字符串”更為常見,但是在基本的數(shù)據(jù)類型中,并沒有字符串這種數(shù)據(jù)類型。為了解決這個問題,Java 語言為我們提供了一個被 final 關(guān)鍵字修飾的類 String,她就表示字符串類型,同時由于其被 final 修飾,這也表明咱們只能用這個類創(chuàng)建字符串以及調(diào)用其中的方法,卻不能繼承她。

雖然 Java 語言為我們提供了字符串類 String,能讓我們方便的使用字符串類型,姑且這么說,但是在不斷的發(fā)展中,我們發(fā)現(xiàn)單純的 String 類型,并不足以滿足我們的需求啦!因此,在 String 類型的基礎(chǔ)上,又衍生出了兩個字符串構(gòu)建器 StringBuffer 和 StringBuilder。對于這三種類型,無論是在求職面試的過程中,還是在日后的實(shí)際工作中,都是需要我們經(jīng)常面對的,因此了解她們之間的區(qū)別就顯得尤為重要啦!

2 String

通過閱讀“1 簡介”,我們已經(jīng)大致了解了 String 類型啦!說她是一個數(shù)據(jù)類型,但她并不是基本數(shù)據(jù)類型,而是一個被 final 修飾的、不可被繼承的類,位于 java.lang 包。至于如何使用 String 類型,有兩種方法,一是直接賦值,二是用 new 創(chuàng)建,具體示例如下:

?
1
2
3
4
5
// 1、直接賦值
String str1 = "維C果糖";
 
// 2、用 new 運(yùn)算符創(chuàng)建
String str2 = new String("維C果糖");

在常見的字符串操作中,判斷兩個字符串是否相等尤為常見,且常用的判別方式有兩種,即用 String 類提供的方法 equals 和 == 運(yùn)算符,在博文“Java 語言中 equals 和 == 的區(qū)別”中,作者詳述了兩者的區(qū)別,有興趣的童鞋可以參考參考。接下來,作者將介紹一些使用頻率比較高的 String 類的 API 方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
boolean endsWith(String suffix)
//* 如果字符串以 suffix 結(jié)尾,則返回 true,否則返回 false */
 
boolean equals(Object other)
/* 如果字符串與 other 相等,則返回 true,否則返回 false */
 
boolean equalsIgnoreCase(String other)
/* 如果字符串與 other 相等(忽略大小寫),則返回 true,否則返回 false */
 
int length()
/* 返回字符串的長度 */
 
String replace(CharSequence oldString, CharSequence newString)
/* 返回一個新字符串,這個字符串用 newString 字符串代替原始字符串中所以的 oldString 字符串,可以用 String 或者 StringBuilder 對象作為 CharSequence 參數(shù) */
 
boolean startsWith(String prefix)
/* 如果字符串以 prefix 開始,則返回 true,否則返回 false */
 
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)
/* 返回一個新字符串,這個字符串包含原始字符串中從 beginIndex 到串尾或 endIndex-1 位置的所以代碼單元 */
 
String toLowerCase()
/* 返回一個新字符串,這個字符串將原始字符串中的所以大寫字母都改成了小寫字母 */
 
String toUpperCase()
/* 返回一個新字符串,這個字符串將原始字符串中的所以小寫字母都改成了大寫字母 */
 
String trim()
/* 返回一個新字符串,這個字符串將刪除元字符串頭部和尾部的空格 */

3 StringBuffer

在我們了解了 String 類之后,我們會發(fā)現(xiàn)她有些缺陷,例如當(dāng)我們創(chuàng)建了一個 String 類的對象之后,我們很難對她進(jìn)行增、刪、改的操作,為了解決這個弊端,Java 語言就引入了 StringBuffer 類。StringBuffer 和 String 類似,只是由于 StringBuffer 的內(nèi)部實(shí)現(xiàn)方式和 String 不同,StringBuffer 在進(jìn)行字符串處理時,不用生成新的對象,所以在內(nèi)存的使用上 StringBuffer 要優(yōu)于 String 類。

在 StringBuffer 類中存在很多和 String 類一樣的方法,這些方法在功能上和 String 類中的功能是完全一樣的。但是有一個非常顯著的區(qū)別在于,StringBuffer 對象每次修改都是修改對象本身,這點(diǎn)是其和 String 類的最大區(qū)別。

此外,StringBuffer 是線程安全的,可用于多線程。而且 StringBuffer 對象的初始化與 String 對象的初始化不大一樣,通常情況下,我們使用構(gòu)造方法進(jìn)行初始化,即:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 聲明一個空的 StringBuffer 對象
StringBuffer sb = new StringBuffer();
 
// 聲明并初始化 StringBuffer 對象
StringBuffer sb = new StringBuffer("維C果糖");
 
// 下面的賦值語句是錯的,因?yàn)?StringBuffer 和 String 是不同的類型
StringBuffer sb = "維C果糖";
 
// 下面的賦值語句也是錯的,因?yàn)?StringBuffer 和 String 沒有繼承關(guān)系
StringBuffer sb = (StringBuffer)"維C果糖";
 
// 將 StringBuffer 對象轉(zhuǎn)化為 String 對象
StringBuffer sb = new StringBuffer("維C果糖");
String str = sb.toString();

接下來,介紹一些 StringBuffer 常用的 API 方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
StringBuffer()
/* 構(gòu)造一個空的字符串構(gòu)建器 */
 
int length()
/* 返回構(gòu)建器或緩沖器中的代碼單元(字符)數(shù)量 */
 
StringBuffer append(String str)
/* 追加一個字符串并返回一個 this */
 
StringBuffer append(Char c)
/* 追加一個字符并返回一個 this */
 
void setCharAt(int i, char c)
/* 將第 i 個代碼單元設(shè)置為 c */
 
StringBuffer reverse()
/* 將構(gòu)建器的內(nèi)容進(jìn)行順序的反轉(zhuǎn) c */
 
String toString()
/* 返回一個與構(gòu)建器或緩沖器內(nèi)容相同的字符串 */

4 StringBuilder

在 JDK 5.0 之后,Java 語言又引入了 StringBuilder 類,這個類的前身是 StringBuffer,其效率略微有些低,但允許采用多線程的方式執(zhí)行添加或者刪除字符的操作。如果所有的字符串在一個單線程中(通常都是這樣)編輯,則應(yīng)該用 StringBuilder 代替她,這兩個類的 API 是完全相同的。因此,在本部分,作者就不再贅言啦!

5 總結(jié)

通過以上的介紹,咱們已經(jīng)詳細(xì)的了解了 String、StringBuffer 和 StringBuilder,也知道了她們?nèi)齻€都是用于操作字符串的類。接下來,作者大致總結(jié)一些三者的區(qū)別,以供參考:

  1. 對于操作效率而言,一般來說,StringBuilder > StringBuffer > String;
  2. 對于線程安全而言,StringBuffer 是線程安全的,可用于多線程;而 StringBuilder 是非線程安全的,用于單線程;
  3. 對于頻繁的字符串操作而言,無論是 StringBuffer 還是 StringBuilder,都優(yōu)于 String。

此外,通過 String 創(chuàng)建的對象的是不可變的,而通過 StringBuffer 和 StringBuilder 創(chuàng)建的對象是可以變的,這里的變與不變,指的是字符串的內(nèi)容和長度。如果為了應(yīng)對面試,能夠記住以上內(nèi)容的話,我想足夠答的 perfect 啦;但是如果在實(shí)際開發(fā)中,如何選擇,則要具體情況具體分析啦!

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://blog.csdn.net/qq_35246620/article/details/56024465

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91久久夜色精品国产九色 | 国产精品一区二区三区免费视频 | 婚前试爱免费观看 | 99只有精品 | 欧美伦理影院 | 1024视频色版在线网站 | 久久精品嫩草影院免费看 | 我的妹妹最近有点怪在线观看 | 四虎国产成人免费观看 | japonensis中国东北老人 | 久久青草免费91线频观看站街 | 国产亚洲人成网站在线观看不卡 | 美女福利网站 | 情侣奴伺候女王第2部分小说 | 男人桶女下面60分钟视频 | 2021国产精品视频一区 | 欧美一级在线 | 日韩欧美中文字幕一区二区三区 | 欧美日韩一区二区三区在线播放 | 亚洲国产综合久久精品 | 青柠网在线观看视频 | 日本国产在线视频 | 好大好硬抽搐好爽想要 | 色女的乖男人 | 国产一区二区三区在线看片 | 成人永久免费福利视频网站 | 午夜第九达达兔鲁鲁 | 欧美视频在线一区 | 2012中文字幕中字视频 | 视频大全在线观看免费 | 欧美亚洲国产精品久久第一页 | 办公室操秘书 | 欧美成人免费观看的 | 国产毛片一级aaaaa片 | 日韩在线二区全免费 | www一级片 | 777午夜精品免费播放 | 国产成人亚洲影视在线 | 日本男女视频 | 五月婷婷丁香在线视频 | 午夜影院小视频 |