亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2017年03月08日 10:34:55   投稿:lqh  
這篇文章主要介紹了Java 中 String,StringBuffer 和 StringBuilder 的區(qū)別及用法的相關(guān)資料,需要的朋友可以參考下

1 簡(jiǎn)介

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

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

2 String

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

// 1、直接賦值
String str1 = "維C果糖";

// 2、用 new 運(yùn)算符創(chuàng)建
String str2 = new String("維C果糖");

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

boolean endsWith(String suffix)
//* 如果字符串以 suffix 結(jié)尾,則返回 true,否則返回 false */

boolean equals(Object other)
/* 如果字符串與 other 相等,則返回 true,否則返回 false */

boolean equalsIgnoreCase(String other)
/* 如果字符串與 other 相等(忽略大小寫(xiě)),則返回 true,否則返回 false */

int length()
/* 返回字符串的長(zhǎng)度 */

String replace(CharSequence oldString, CharSequence newString)
/* 返回一個(gè)新字符串,這個(gè)字符串用 newString 字符串代替原始字符串中所以的 oldString 字符串,可以用 String 或者 StringBuilder 對(duì)象作為 CharSequence 參數(shù) */

boolean startsWith(String prefix)
/* 如果字符串以 prefix 開(kāi)始,則返回 true,否則返回 false */

String substring(int beginIndex)
String substring(int beginIndex, int endIndex)
/* 返回一個(gè)新字符串,這個(gè)字符串包含原始字符串中從 beginIndex 到串尾或 endIndex-1 位置的所以代碼單元 */

String toLowerCase()
/* 返回一個(gè)新字符串,這個(gè)字符串將原始字符串中的所以大寫(xiě)字母都改成了小寫(xiě)字母 */

String toUpperCase()
/* 返回一個(gè)新字符串,這個(gè)字符串將原始字符串中的所以小寫(xiě)字母都改成了大寫(xiě)字母 */

String trim()
/* 返回一個(gè)新字符串,這個(gè)字符串將刪除元字符串頭部和尾部的空格 */

3 StringBuffer

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

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

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

// 聲明一個(gè)空的 StringBuffer 對(duì)象
StringBuffer sb = new StringBuffer();

// 聲明并初始化 StringBuffer 對(duì)象
StringBuffer sb = new StringBuffer("維C果糖");

// 下面的賦值語(yǔ)句是錯(cuò)的,因?yàn)?StringBuffer 和 String 是不同的類(lèi)型
StringBuffer sb = "維C果糖";

// 下面的賦值語(yǔ)句也是錯(cuò)的,因?yàn)?StringBuffer 和 String 沒(méi)有繼承關(guān)系
StringBuffer sb = (StringBuffer)"維C果糖";

// 將 StringBuffer 對(duì)象轉(zhuǎn)化為 String 對(duì)象
StringBuffer sb = new StringBuffer("維C果糖");
String str = sb.toString();

接下來(lái),介紹一些 StringBuffer 常用的 API 方法:

StringBuffer()
/* 構(gòu)造一個(gè)空的字符串構(gòu)建器 */

int length()
/* 返回構(gòu)建器或緩沖器中的代碼單元(字符)數(shù)量 */

StringBuffer append(String str)
/* 追加一個(gè)字符串并返回一個(gè) this */

StringBuffer append(Char c)
/* 追加一個(gè)字符并返回一個(gè) this */

void setCharAt(int i, char c)
/* 將第 i 個(gè)代碼單元設(shè)置為 c */

StringBuffer reverse()
/* 將構(gòu)建器的內(nèi)容進(jìn)行順序的反轉(zhuǎn) c */

String toString()
/* 返回一個(gè)與構(gòu)建器或緩沖器內(nèi)容相同的字符串 */

4 StringBuilder

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

5 總結(jié)

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

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

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

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

  • java 代碼中預(yù)防空指針異常的處理辦法

    java 代碼中預(yù)防空指針異常的處理辦法

    個(gè)人在做項(xiàng)目時(shí),對(duì)NullPointerException的幾點(diǎn)總結(jié),請(qǐng)網(wǎng)友拍磚?。。《喽嗵嵋庖?jiàn),
    2013-03-03
  • Java 確保某個(gè)Bean類(lèi)被最后執(zhí)行的幾種實(shí)現(xiàn)方式

    Java 確保某個(gè)Bean類(lèi)被最后執(zhí)行的幾種實(shí)現(xiàn)方式

    這篇文章主要介紹了Java 確保某個(gè)BeanDefinitionRegistryPostProcessor Bean被最后執(zhí)行的幾種實(shí)現(xiàn)方式,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • Java跳出多重嵌套循環(huán)代碼實(shí)例

    Java跳出多重嵌套循環(huán)代碼實(shí)例

    這篇文章主要介紹了Java跳出多重嵌套循環(huán),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • log4j2采用AsyncLogger出現(xiàn)的錯(cuò)誤及解決方案

    log4j2采用AsyncLogger出現(xiàn)的錯(cuò)誤及解決方案

    這篇文章主要介紹了log4j2采用AsyncLogger出現(xiàn)的錯(cuò)誤及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • spring boot如何使用AOP統(tǒng)一處理web請(qǐng)求

    spring boot如何使用AOP統(tǒng)一處理web請(qǐng)求

    這篇文章主要介紹了spring boot如何使用AOP統(tǒng)一處理web請(qǐng)求,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • java開(kāi)發(fā)之內(nèi)部類(lèi)的用法

    java開(kāi)發(fā)之內(nèi)部類(lèi)的用法

    本篇文章介紹了,java開(kāi)發(fā)之內(nèi)部類(lèi)的用法。需要的朋友參考下
    2013-05-05
  • 解決idea不支持SpringBoot yml文件的圖文教程

    解決idea不支持SpringBoot yml文件的圖文教程

    這篇文章主要介紹了解決idea不支持SpringBoot yml文件,需要的朋友可以參考下
    2018-06-06
  • 深入學(xué)習(xí)Java中的SPI機(jī)制

    深入學(xué)習(xí)Java中的SPI機(jī)制

    這篇文章主要介紹了深入學(xué)習(xí)Java中的SPI機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • eclipse啟動(dòng)出現(xiàn)“failed to load the jni shared library”問(wèn)題解決

    eclipse啟動(dòng)出現(xiàn)“failed to load the jni shared library”問(wèn)題解決

    這篇文章主要介紹了eclipse啟動(dòng)出現(xiàn)“failed to load the jni shared library”問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 最新評(píng)論