- String是引用類(lèi)型P印答倡!
- String在設(shè)計(jì)之初,虛擬機(jī)就對(duì)它做了特殊的優(yōu)化幔嫂,將字符串保存在虛擬機(jī)內(nèi)部的字符串常量池中辆它。一旦我們要?jiǎng)?chuàng)建一個(gè)字符串,虛擬機(jī)會(huì)先去常量池中檢查是否創(chuàng)建過(guò)這個(gè)字符串履恩,若有則直接引用锰茉。String對(duì)象因?yàn)橛辛松鲜龅膬?yōu)化,就要保證該對(duì)象自創(chuàng)建開(kāi)始就不能改變切心!所以對(duì)字符串的任何變化都會(huì)創(chuàng)建新的對(duì)象飒筑!
- 如果想創(chuàng)建一個(gè)和字符串常量池中字符串一樣的新字符串對(duì)象片吊,可以通過(guò)new String()方法創(chuàng)建。
- 字符串的equals方法
兩個(gè)字符串進(jìn)行比較的時(shí)候协屡,我們通常使用equals方法進(jìn)行比較俏脊,雖然java虛擬機(jī)對(duì)字符串做了優(yōu)化,但是我們不能保證任何時(shí)候==都成立7粝(通過(guò)new String()方法創(chuàng)建的對(duì)象就不成立)爷贫。
- 當(dāng)我們將一個(gè)字符串變量與一個(gè)字面量進(jìn)行等值比較時(shí),我們不要去調(diào)用變量的.equals方法补憾。而是應(yīng)該調(diào)用字面量的.equals方法漫萄。這樣是為了避免調(diào)用.equals方法報(bào)空值針異常,因?yàn)槲覀儾荒鼙WC變量是否為null盈匾,所有我們將不確定是否為null的值放入equals方法的參數(shù)中腾务。
- StringBuilder
/**
* StringBuilder該類(lèi)對(duì)于某個(gè)字符串頻繁的編輯操作
* 使用StringBuilder可以在大規(guī)模修改字符串時(shí)不開(kāi)辟新的字符串對(duì)象,從而節(jié)約內(nèi)存資源威酒。
* 所以窑睁,對(duì)已有著大量操作字符串的邏輯中,不應(yīng)使用String而應(yīng)該使用StringBuilder葵孤。
*/
public class StringBuilderTest {
public static void main(String[] args){
StringBuilder stringBuilder=new StringBuilder("I");
String string=stringBuilder.toString();//I
System.out.println(string);
//追加字符串
stringBuilder.append("love").append(" java!");
System.out.println(stringBuilder.toString());//Ilove java!
//插入字符串
stringBuilder.insert(1," ");
System.out.println(stringBuilder.toString());//I love java!
//替換字符串
stringBuilder.replace(2,6,"hate");
System.out.println(stringBuilder.toString());//I hate java!
//刪除字符串
stringBuilder.delete(6,stringBuilder.length());
System.out.println(stringBuilder.toString());//I hate
//字符串反轉(zhuǎn)
stringBuilder.reverse();
System.out.println(stringBuilder.toString());//etah I
}
}
- StringBuilder與StringBuffer
- 效果是一樣的
- 區(qū)別:StringBuilder不是線程安全的担钮,StringBuffer是線程安全的。
- 在多線程操作的情況下用StringBuffer尤仍,因?yàn)镾tringBuffer是線程安全的箫津;它難免要顧及線程安全問(wèn)題,而進(jìn)行必要的安全驗(yàn)證操作宰啦,所以效率上比StringBuilder低苏遥。根據(jù)實(shí)際情況選擇使用。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者