第四節 java String對象的創建 與 “+”拼接字符串
public class base02 {
public static void main(String[] args) {
//String 是引用類型,aString,bString中只存在一個對象的引用
//String在創建的時候,會現在常量池中進行尋找,如果不存在,則創建此字符串且放入常量池
//如果存在,則直接返回字符串的引用,賦值給變量
String aString="abc";//創建“abc”
String bString="abc";//不創建“abc”
System.out.println(aString==bString);//true 所以此處相等
String cString=new String("bcd");//創建對象,創建bcd
String dString=new String("bcd");//創建對象,不創建bcd,因爲在常量池中已經存在
//因爲創建了兩個對象(不同的內存地址),只是這兩個對象都指向了同一個常量池中的“bcd”
System.out.println(cString==dString);//false 所以不相等
// http://blog.csdn.net/zengshunyao/article/details/40023577(字符串相加問題詳解,感謝)
String eString="a"+"b"; //編譯時優化 常量池存入”ab“ 標識eString指向的字符串常量池中“ab”,二不是"a","b"
String fString="a"+1+2;//編譯時優化,常量池存入”a12“
String gString="gs";//創建字符串
String hString="hs"+gString; //檢測到與非常量相加,創建Stringbuilder,append後,調用toString方法
StringBuilder sb=new StringBuilder();
sb.append("hs").append(gString); //此種方式和上面的字符串變量相加是一樣的效果
//應該避免此種操作
String iString=null;
for(int i=0;i<100;i++){
iString+=gString;//每次循環創建Stringbuilder,調用append,toString
}
//減少對象創建和銷燬的時間
StringBuilder jString=null;
for(int i=0;i<100;i++){
jString.append(gString);//只創建一次Stringbuilder
}
}
}
public static void main(String[] args) {
//String 是引用類型,aString,bString中只存在一個對象的引用
//String在創建的時候,會現在常量池中進行尋找,如果不存在,則創建此字符串且放入常量池
//如果存在,則直接返回字符串的引用,賦值給變量
String aString="abc";//創建“abc”
String bString="abc";//不創建“abc”
System.out.println(aString==bString);//true 所以此處相等
String cString=new String("bcd");//創建對象,創建bcd
String dString=new String("bcd");//創建對象,不創建bcd,因爲在常量池中已經存在
//因爲創建了兩個對象(不同的內存地址),只是這兩個對象都指向了同一個常量池中的“bcd”
System.out.println(cString==dString);//false 所以不相等
// http://blog.csdn.net/zengshunyao/article/details/40023577(字符串相加問題詳解,感謝)
String eString="a"+"b"; //編譯時優化 常量池存入”ab“ 標識eString指向的字符串常量池中“ab”,二不是"a","b"
String fString="a"+1+2;//編譯時優化,常量池存入”a12“
String gString="gs";//創建字符串
String hString="hs"+gString; //檢測到與非常量相加,創建Stringbuilder,append後,調用toString方法
StringBuilder sb=new StringBuilder();
sb.append("hs").append(gString); //此種方式和上面的字符串變量相加是一樣的效果
//應該避免此種操作
String iString=null;
for(int i=0;i<100;i++){
iString+=gString;//每次循環創建Stringbuilder,調用append,toString
}
//減少對象創建和銷燬的時間
StringBuilder jString=null;
for(int i=0;i<100;i++){
jString.append(gString);//只創建一次Stringbuilder
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.