第四節 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
        }        
        
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章