String
String字符串常量
java.lang.String類,不屬于8種基本數(shù)據(jù)類型,String是一個(gè)對象驰弄,表示字符串常量。
因?yàn)閷ο蟮哪J(rèn)值是null速客,所以String的默認(rèn)值也是null戚篙,但它又是一種特殊的對象,有其他對象沒有的特性溺职。
new String()和new String("")都是聲明一個(gè)新的空字符串岔擂,是空串不是null。區(qū)別:空串是經(jīng)過new運(yùn)算符分配了內(nèi)存浪耘,即實(shí)際存在了(定義了)乱灵。而null則沒有(只聲明),調(diào)用null的字符串的方法會拋出空指針異常七冲。
String類是final的痛倚,不可被繼承。public final class String癞埠。
String類的本質(zhì)是字符數(shù)組char[]状原,并且其值不可改變。private final char value[];
String類對象有個(gè)特殊的創(chuàng)建方式苗踪,如String x="abc"; "abc"就表示一個(gè)字符串對象颠区,而x是"abc"對象的地址,叫做"abc"引用通铲。
創(chuàng)建字符串的方式歸納起來有三種:
使用new關(guān)鍵字創(chuàng)建字符串毕莱,String s = new String("abc");
直接指定,String s = "abc";
使用串聯(lián)生成新的字符串颅夺,String s = "ab" + "c";
StringBuffer
StringBuffer字符串變量(線程安全)
StringBuffer是一個(gè)類似于 String 的字符串緩沖區(qū)朋截,但不能修改。雖然在任意時(shí)間點(diǎn)上它都包含某種特定的字符序列吧黄,但通過某些方法調(diào)用可以改變該序列的長度和內(nèi)容部服。
StringBuffer 上的主要操作是 append 和 insert 方法,可重載這些方法拗慨,以接受任意類型的數(shù)據(jù)廓八。每個(gè)方法都能有效地將給定的數(shù)據(jù)轉(zhuǎn)換成字符串,然后將該字符串的字符追加或插入到字符串緩沖區(qū)中赵抢。append 方法始終將這些字符添加到緩沖區(qū)的末端剧蹂;而 insert 方法則在指定的點(diǎn)添加字符。
append代碼如下:
String str = "a"+ "b" + 1;
StringBuffer buffer = new StringBuffer(str);
buffer.append("c");
System.out.println(buffer);
輸出結(jié)果
ab1c
insert代碼如下:
String str = "a"+ "b" + 1;
StringBuffer buffer = new StringBuffer(str);
buffer.insert(2,"java");
System.out.println(buffer);
輸出結(jié)果
abjava1c
每個(gè)字符串緩沖區(qū)都有一定的容量烦却。只要字符串緩沖區(qū)所包含的字符序列的長度沒有超出此容量宠叼,就無需分配新的內(nèi)部緩沖區(qū)數(shù)組。如果內(nèi)部緩沖區(qū)溢出其爵,則此容量自動增大冒冬。
StringBuilder
StringBuilder字符串變量(非線程安全)
StringBuilder比 StringBuffer 要快。 在 StringBuilder 上的主要操作是 append 和 insert 方法摩渺。每個(gè)方法都能有效地將給定的數(shù)據(jù)轉(zhuǎn)換成字符串窄驹,然后將該字符串的字符添加或插入到字符串生成器中。append 方法始終將這些字符添加到生成器的末端证逻;而 insert 方法則在指定的點(diǎn)添加字符闭树。
StringBuilder此類提供一個(gè)與 StringBuffer 兼容的 API,但不保證同步八千。該類被設(shè)計(jì)用作 StringBuffer 的一個(gè)簡易替換馍惹,用在字符串緩沖區(qū)被單個(gè)線程使用的時(shí)候(這種情況很普遍)龙宏。如果可能棵逊,建議優(yōu)先采用該類,因?yàn)樵诖蠖鄶?shù)實(shí)現(xiàn)中银酗,它比 StringBuffer 要快
String和StringBuffer的區(qū)別
String 是不可變的對象辆影,每次對 String 類型進(jìn)行改變的時(shí)候其實(shí)都等同于生成了一個(gè)新的 String 對象徒像,然后將指針指向新的 String 對象,每次生成對象都會對系統(tǒng)性能產(chǎn)生影響蛙讥。
而 StringBuffer 類锯蛀,每次都會對 StringBuffer 對象本身進(jìn)行操作,而不是生成新的對象次慢,再改變對象引用旁涤。
StringBuffer和StringBuilder的區(qū)別
StringBuffer線程安全(多線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù))
StringBuilder非線程安全(單線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù))
StringBuilder要比StringBuffer執(zhí)行速度快。