Java基礎(chǔ)-String、StringBuffer與StringBuilder

String

String 類代表字符串。字符串是常量;它們的值在創(chuàng)建之后不能更改。

String的方法

.equals

很多人經(jīng)常把.equals和==混淆。==用來比較是否是同一對象, .equals 用來比較內(nèi)容是否相同。 接下來我們用代碼來驗證一下兩者的區(qū)別。
運行如下代碼:

        String abc = "abc" + "bcd";// 常量
        
        String bcd = "bcd";

        String abc1 = "abc" + bcd;// 不是常量
        if (abc == abc1) {
            System.out.println("同一個對象");
        } else {
            System.out.println("不同對象");
        }
        if (abc.equals(abc1)) {
            System.out.println("內(nèi)容相同");
        } else {
            System.out.println("內(nèi)容不同");
        }

結(jié)果:

不同對象
內(nèi)容相同

經(jīng)過上面的驗證,相信你對 equals 方法有了一定的理解。我們再來看看 equals 的底層實現(xiàn):

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

這里第一個if判斷驗證是否是同一個對象,如果是內(nèi)容必定相等,返回true;第二個則是用來判斷內(nèi)容是否相同。

其他常用方法

String還有一些其他的常用方法,下面給大家羅列一下:
1.構(gòu)造方法
String的構(gòu)造方法可以放入 byte 數(shù)組,char 數(shù)組,StringBuffer, StringBuilder 等參數(shù),構(gòu)造器會自動將其轉(zhuǎn)換成String類型,非常方便。如:String(char[] value) 可以分配一個新的 String ,使其表示字符數(shù)組參數(shù)中當(dāng)前包含的字符序列。
2.方法摘要
(1)charAt(int index):返回指定索引處的char值。
(2)compareTo(String anotherString):按字典順序比較兩個字符串。 可用于字符串排序。
(3)isEmpty():當(dāng)且僅當(dāng) length() 為 0 時返回 true。經(jīng)常用到的判定條件。
(4)length():返回此字符串的長度。
(5)matches(String regex): 告知此字符串是否匹配給定的正則表達式。
(6)replace(char oldChar, char newChar):返回一個新的字符串,它是通過用 newChar 替換此字符串中出現(xiàn)的所有 oldChar 得到的。
(7)split(String regex):根據(jù)給定正則表達式的匹配拆分此字符串。
(8)startsWith(String prefix):測試此字符串是否以指定的前綴開始。經(jīng)常用的判定條件。
(9)substring(int beginIndex):返回一個新的字符串,它是此字符串的一個子字符串。截取字符串時使用,參數(shù)是開始截取的位置。
(10)substring(int beginIndex, int endIndex): 截取字符串時使用,參數(shù)是開始截取的位置和結(jié)束位置,左閉右開。
(11)toCharArray(): 將此字符串轉(zhuǎn)換為一個新的字符數(shù)組。
(12)toString(): 返回此對象本身(它已經(jīng)是一個字符串?。?。
(13)valueOf(各種類型參數(shù)): 返回各種類型參數(shù)的字符串表示形式。

StringBuffer

StringBuffer 是線程安全的可變字符序列。一個類似于 String 的字符串緩沖區(qū),正常來說它的初始容量為 16 個字符,如果后來需要更多容量,它會另外開辟更大的空間,將原來的字符轉(zhuǎn)存到新的空間中。 StringBuffer用在多種數(shù)據(jù)類型的拼接和若干次拼接,效率更高,內(nèi)存更節(jié)省

構(gòu)造方法

StringBuffer 最常使用的構(gòu)造方法有兩種一種是StringBuffer(),只是創(chuàng)建 16 個字符的緩沖區(qū);另一種是StringBuffer(String str),它不僅構(gòu)造了一個字符串緩沖區(qū),還會將參數(shù) str 初始化為指定的字符串內(nèi)容。

常用方法

StringBuffer 常用的方法有:追加、插入、刪除、修改等。

追加

使用 append 方法在最后添加。

插入

使用 insert 方法在指定位置添加。

刪除

使用 delete 方法刪除指定區(qū)域,左閉右開。end多大都不會越界,只有start為負數(shù),大于長度或大于end時報錯。

修改

使用 replace 方法將指定區(qū)域的字符替換成新字符串,左閉右開。

代碼

public class Main {
    public static void main(String[] args) {
        // StringBuffer是一個將字符數(shù)組封裝起來的類
        StringBuffer sb = new StringBuffer("abc");
        // 追加
        sb.append("a");
        System.out.println(sb);
        // 插入
        sb.insert(2,"Java");
        System.out.println(sb);
        // 刪除
        sb.delete(2,6);
//        sb.delete(2,100); 沒有越界,只有start為負數(shù),大于長度或大于end時報錯
        System.out.println(sb);
        // 修改
        sb.replace(2,3,"Java");
        System.out.println(sb);
        // StringBuffer 轉(zhuǎn)成String
        // 方式一:
        String string = sb.toString();
        // 方式二:
        String string1 = new String(sb);
    }
}

StringBuilder

一個可變的字符序列。此類提供一個與 StringBuffer 兼容的 API,但不保證同步。在單線程比StringBuffer更快。
由于 API 與 StringBuffer 兼容,方法是一樣的,不再贅述。

區(qū)別

String 是不可以改變的,更改 String 對象的實質(zhì)是生成新的 String 對象存放修改后的字符串。所以對于需要經(jīng)常修改的字符串,建議使用 StringBuffer 和 StringBuilder 。
而 StringBuilder 作為JDK 5為 StringBuffer 補充的一個單個線程使用的等價類,有一個與 StringBuffer 兼容的 API ,且在單線程中效率更高。
但 StringBuffer 在多線程的情況下比 StringBuilder 更安全。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容