1.String
-
String本質(zhì)
String是不可變的凤巨,他的實(shí)質(zhì)是被final修飾過的char數(shù)組针炉。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
-
String方法
編號 | 方法 | 說明 |
---|---|---|
1 | char charAt(int index) | 返回指定索引處的 char 值。 |
2 | int compareTo(String anotherString) | 按字典順序比較兩個(gè)字符串渠羞。 |
3 | boolean endsWith(String suffix) | 測試此字符串是否以指定的后綴結(jié)束斤贰。 |
4 | byte[] getBytes() | 使用平臺的默認(rèn)字符集將此 String 編碼為 byte 序列,并將結(jié)果存儲到一個(gè)新的 byte 數(shù)組中次询。 |
5 | int length() | 返回此字符串的長度荧恍。 |
6 | boolean matches(String regex) | 告知此字符串是否匹配給定的正則表達(dá)式。 |
7 | String replace(char oldChar, char newChar) | 返回一個(gè)新的字符串屯吊,它是通過用 newChar 替換此字符串中出現(xiàn)的所有 oldChar 得到的块饺。 |
8 | String[] split(String regex) | 根據(jù)給定正則表達(dá)式的匹配拆分此字符串。 |
9 | String substring(int beginIndex) | 返回一個(gè)新的字符串雌芽,它是此字符串的一個(gè)子字符串。 |
10 | char[] toCharArray() | 將此字符串轉(zhuǎn)換為一個(gè)新的字符數(shù)組辨嗽。 |
11 | String trim() | 返回字符串的副本世落,忽略前導(dǎo)空白和尾部空白。 |
-
有關(guān)String的面試題
String s1 = "abc"; // 常量池
String s2 = new String("abc"); // 堆內(nèi)存中
System.out.println(s1==s2); // false兩個(gè)對象的地址值不一樣糟需。
System.out.println(s1.equals(s2)); // true
2.StringBuilder與StringBuffer
-
簡短介紹
String:字符串常量屉佳,字符串長度不可變。用于存放字符的數(shù)組被聲明為final洲押。
StringBuffer:字符串變量(Synchronized武花,即線程安全)¤菊剩可將字符串緩沖區(qū)安全地用于多個(gè)線程体箕。
StringBuilder:字符串變量(非線程安全)专钉。在內(nèi)部 StringBuilder 對象被當(dāng)作是一個(gè)包含字符序列的變長數(shù)組。
-
使用選擇
- 如果要操作少量的數(shù)據(jù)用 String累铅,大量操作使用StringBuffer 和 StringBuilder 是因?yàn)槟軌虮欢啻蔚男薷脑拘耄⑶也划a(chǎn)生新的未使用對象。
- 單線程大量操作數(shù)據(jù)用StringBuilder娃兽,它的速度大于StringBuffer菇民。
- 多線程大量操作數(shù)據(jù)用StringBuffer,但是stringbuffer 的線程安全投储,僅僅是保證 jvm 不拋出異常順利的往下執(zhí)行而已第练,它可不保證邏輯正確和調(diào)用順序正確,所以并不常用玛荞。
-
StringBuilder操作小案例
StringBuildera=newStringBuilder("");
a.append("i'm a good boy");//附加
System.out.println(a.toString());
a=a.reverse();//翻轉(zhuǎn)
System.out.println(a.toString());
a.delete(0,1);//刪除
System.out.println(a.toString());
a.insert(0,"ha");//插入
System.out.println(a.toString());
a.replace(1,2,"666");//替換
System.out.println(a.toString());
對應(yīng)結(jié)果
i'm a good boy
yob doog a m'i
ob doog a m'i
haob doog a m'i
h666ob doog a m'i