您好,登錄后才能下訂單哦!
1 簡介
在 Java 語言中,共有 8 個基本的數據類型,分別為:byte、short、int、long、float、double、boolean 和 char,其中 char 類型用于表示單個字符,例如 a、b、c 、A、B、C、& 這些大小寫字母或者特殊字符等等。在實際的編程中,單個的字符并沒有我們想象中用的那么頻繁,反而是多個字符組成的“字符串”更為常見,但是在基本的數據類型中,并沒有字符串這種數據類型。為了解決這個問題,Java 語言為我們提供了一個被 final 關鍵字修飾的類 String,她就表示字符串類型,同時由于其被 final 修飾,這也表明咱們只能用這個類創建字符串以及調用其中的方法,卻不能繼承她。
雖然 Java 語言為我們提供了字符串類 String,能讓我們方便的使用字符串類型,姑且這么說,但是在不斷的發展中,我們發現單純的 String 類型,并不足以滿足我們的需求啦!因此,在 String 類型的基礎上,又衍生出了兩個字符串構建器 StringBuffer 和 StringBuilder。對于這三種類型,無論是在求職面試的過程中,還是在日后的實際工作中,都是需要我們經常面對的,因此了解她們之間的區別就顯得尤為重要啦!
2 String
通過閱讀“1 簡介”,我們已經大致了解了 String 類型啦!說她是一個數據類型,但她并不是基本數據類型,而是一個被 final 修飾的、不可被繼承的類,位于 java.lang 包。至于如何使用 String 類型,有兩種方法,一是直接賦值,二是用 new 創建,具體示例如下:
// 1、直接賦值 String str1 = "維C果糖"; // 2、用 new 運算符創建 String str2 = new String("維C果糖");
在常見的字符串操作中,判斷兩個字符串是否相等尤為常見,且常用的判別方式有兩種,即用 String 類提供的方法 equals 和 == 運算符,在博文“Java 語言中 equals 和 == 的區別”中,作者詳述了兩者的區別,有興趣的童鞋可以參考參考。接下來,作者將介紹一些使用頻率比較高的 String 類的 API 方法:
boolean endsWith(String suffix) //* 如果字符串以 suffix 結尾,則返回 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 參數 */ 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 類之后,我們會發現她有些缺陷,例如當我們創建了一個 String 類的對象之后,我們很難對她進行增、刪、改的操作,為了解決這個弊端,Java 語言就引入了 StringBuffer 類。StringBuffer 和 String 類似,只是由于 StringBuffer 的內部實現方式和 String 不同,StringBuffer 在進行字符串處理時,不用生成新的對象,所以在內存的使用上 StringBuffer 要優于 String 類。
在 StringBuffer 類中存在很多和 String 類一樣的方法,這些方法在功能上和 String 類中的功能是完全一樣的。但是有一個非常顯著的區別在于,StringBuffer 對象每次修改都是修改對象本身,這點是其和 String 類的最大區別。
此外,StringBuffer 是線程安全的,可用于多線程。而且 StringBuffer 對象的初始化與 String 對象的初始化不大一樣,通常情況下,我們使用構造方法進行初始化,即:
// 聲明一個空的 StringBuffer 對象 StringBuffer sb = new StringBuffer(); // 聲明并初始化 StringBuffer 對象 StringBuffer sb = new StringBuffer("維C果糖"); // 下面的賦值語句是錯的,因為 StringBuffer 和 String 是不同的類型 StringBuffer sb = "維C果糖"; // 下面的賦值語句也是錯的,因為 StringBuffer 和 String 沒有繼承關系 StringBuffer sb = (StringBuffer)"維C果糖"; // 將 StringBuffer 對象轉化為 String 對象 StringBuffer sb = new StringBuffer("維C果糖"); String str = sb.toString();
接下來,介紹一些 StringBuffer 常用的 API 方法:
StringBuffer() /* 構造一個空的字符串構建器 */ int length() /* 返回構建器或緩沖器中的代碼單元(字符)數量 */ StringBuffer append(String str) /* 追加一個字符串并返回一個 this */ StringBuffer append(Char c) /* 追加一個字符并返回一個 this */ void setCharAt(int i, char c) /* 將第 i 個代碼單元設置為 c */ StringBuffer reverse() /* 將構建器的內容進行順序的反轉 c */ String toString() /* 返回一個與構建器或緩沖器內容相同的字符串 */
4 StringBuilder
在 JDK 5.0 之后,Java 語言又引入了 StringBuilder 類,這個類的前身是 StringBuffer,其效率略微有些低,但允許采用多線程的方式執行添加或者刪除字符的操作。如果所有的字符串在一個單線程中(通常都是這樣)編輯,則應該用 StringBuilder 代替她,這兩個類的 API 是完全相同的。因此,在本部分,作者就不再贅言啦!
5 總結
通過以上的介紹,咱們已經詳細的了解了 String、StringBuffer 和 StringBuilder,也知道了她們三個都是用于操作字符串的類。接下來,作者大致總結一些三者的區別,以供參考:
此外,通過 String 創建的對象的是不可變的,而通過 StringBuffer 和 StringBuilder 創建的對象是可以變的,這里的變與不變,指的是字符串的內容和長度。如果為了應對面試,能夠記住以上內容的話,我想足夠答的 perfect 啦;但是如果在實際開發中,如何選擇,則要具體情況具體分析啦!
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。