<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一顆開花的樹

    談笑但看風云起,龍騰尚待驚蟄春.

     

    java字符串知多少

    public class stringTest
    {
        String str 
    = "1234";
        
    private void ChangeOne(String s)
        
    {
            s 
    = "4321";    
        }

        
    private void ChangeTwo(stringTest st)
        
    {
            st.str 
    = "5678";
        }

        
    //傳入類的對象
        private void ChangeThree(stringTest st)
        
    {
            st 
    = null;    
        }

        
        
    private void ChangeFour(String str)
        
    {
                String str2 
    = str;
                str 
    = "hello";
                System.out.println(
    "str is " + str);
                System.out.println(
    "str2 is "+ str2);
        }

        
        
    private void ChangeFive(StringBuffer sb)
        
    {
                sb 
    = new StringBuffer("Test");
                System.out.println(sb.toString());
                
    //這里打印結果為Test,但傳進來的StringBuffer對象不會改變,出方法后仍為原來的值
        }

        
    private void ChangeSix(StringBuffer sb)
        
    {
            sb.append(
    "world ");    
        }

        
        
    private void ChangeSeven()
        
    {
            StringBuffer sb1 
    = new StringBuffer("sb1 ");
            StringBuffer sb2 
    = new StringBuffer();
            sb2 
    = sb1;
            sb2.append(
    "add sb2");
            System.out.println(sb1.toString());            
            
    //打出的結果為 sb1 add sb2 ,此處賦值方式為將sb1所指向的地址簡單的賦值給sb2
            
    //兩個對象指向同一內存地址中的值.
        }

        
        
    private void strTest()
        
    {        
            String str1 
    = "helloworld";
            String str2 
    = "helloworld";        
            
            String str3 
    = new String("helloworld");
            String str4 
    = new String("helloworld");    
            
            System.out.println(
    "字符串的存儲方式!");
            System.out.println(str1 
    == str2);
            System.out.println(str1 
    == str3);    
            System.out.println(str4 
    == str3);    
            
    //結果為true ,false ,false。每次new一個都會使用不同的內存塊。
            
    // str1和str2指向字符串常量 str,而str3,str4指向各自的 new String("str");
            
            String str5 
    = "hello"+"world";
            String str6 
    = "hello";
            String str7 
    = "world";
            String str8 
    = str6 + str7;
            
            System.out.println(
    "str1 == str5 is: "+(str1 == str5));
            System.out.println(
    "str1 == str8 is: "+(str1 == str8));
        }

        
    public static void main(String[] args)
        
    {            
                stringTest st 
    = new stringTest();
                System.out.println(st.str);
                System.out.println(
    "-----------傳入字符串時---------------");
                st.ChangeOne(st.str);
                System.out.println(st.str);
                
                System.out.println(
    "-----------傳入類對象時,更改對象.str時---------------");
                st.ChangeTwo(st);
                System.out.println(st.str);
                
                System.out.println(
    "-----------將類對象賦為null時---------------");
                st.ChangeThree(st);
                System.out.println(st.str);
                
                System.out.println(
    "--------------------------------------");
                st.ChangeFour(st.str);            
                System.out.println(st.str);
                
                System.out.println(
    "------------StringBuffer測試---------");
                StringBuffer sb 
    = new StringBuffer("Hello ");
                st.ChangeFive(sb);
                System.out.println(sb.toString());
                st.ChangeSix(sb);
                System.out.println(sb.toString());
                
                System.out.println(
    "------------StringBuffer測試2---------");
                st.ChangeSeven();
                st.strTest();
        }
        
    }

    /*
    //(1) 當 = 的右邊全是字符串常量,那么 = 左邊的變量(左值)也成為字符串常量。 
    //(2) 當 = 的右邊包含字符串變量(或其它變量),那么 = 左邊的變量(左值)也成為字符串變量(StringBuffer().append()的結果)。 
    1. 每個Thread有自己的 運行棧。Stack 

    2. 每次函數調用,運行棧頂部上都會為 該函數調用 分配一個Stack Frame. 這也稱為Context. 

    3. 函數調用結束,棧指針回到上一級函數調用的Context, Stack Frame, 剛才分配的頂部Stack Frame 就失效。上一級函數成為當前Stack Frame, Context。 

    4. 每次函數調用, 參數都會 壓棧 壓入運行棧。注意,這是非常重要的。 

    5. 壓入運行棧內的 參數,是 Copy 了一份。注意,這也是非常重要的。所以,對參數 賦值,對上一級函數調用來說,是根本沒有意義的。 
    因為只是改變了頂部Stack Frame里面 參數Copy的內容,根本不對上一級 Stack Frame 造成任何影響。 

    */



    //關于String str = new String("abc"); String str2 = new String("abc"); 為什么會指向
    //不同的reference,有一種說是利于lock的說法
    class ClassLockA1
    {
            String strLock 
    = new String("lock");
            
    private void startA1()
            
    {
                    
    synchronized(strLock)
                    
    {
                            
    //do something here
                    }

            }
            
    }

    class ClassLockA2
    {
            String strLock 
    = new String("lock");    
            
    private void startA2()
            
    {
                    
    synchronized(strLock)
                    
    {
                            
    //do something here
                    }

            }

    }

    //上面這情況每個strLock都有不同的reference,具有不同的同步鎖,不會相互影響。
    //如果是
    class ClassLockB1
    {
            String strLock 
    = "lock";
            
    private void startA1()
            
    {
                    
    synchronized(strLock)
                    
    {
                            
    //do something here
                    }

            }
            
    }

    class ClassLockB2
    {
            String strLock 
    = "lock";
            
    private void startA2()
            
    {
                    
    synchronized(strLock)
                    
    {
                            
    //do something here
                    }

            }

    }

    //這種情況下 兩個類的lock都是相同的引用,兩個類本身同步。
    //疑問:字符串池是針對同一個應用程序中所有類的不是不同的類有不同的字符串池呢?
    //如果是不同的類不同的字符串池,則上面的線程則仍是不相互干擾的。


    posted on 2006-03-14 00:32 澤來-王者之劍 閱讀(821) 評論(1)  編輯  收藏 所屬分類: j2se

    導航

    統計

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    友情鏈接

    搜索

    最新評論

    主站蜘蛛池模板: 好吊妞788免费视频播放| 四虎影视www四虎免费| 四虎影视在线永久免费观看| 波多野结衣中文一区二区免费 | 1000部拍拍拍18勿入免费视频下载| 永久在线免费观看| 亚洲香蕉免费有线视频| 久久亚洲精品国产亚洲老地址| 亚洲一卡2卡3卡4卡乱码 在线| 黄人成a动漫片免费网站| 中文字幕a∨在线乱码免费看| 日韩精品内射视频免费观看| 永久黄网站色视频免费观看| 亚洲国产精品无码久久SM| 亚洲高清有码中文字| 日韩成人免费视频播放| 亚洲精品影院久久久久久| 人成电影网在线观看免费| 一个人看的www在线观看免费| 国产亚洲精品成人AA片新蒲金| 亚洲熟妇av一区二区三区下载| 亚洲精品视频免费在线观看| 亚洲日本人成中文字幕| 日韩a级毛片免费观看| 国产成人高清亚洲一区久久 | 精品国产亚洲AV麻豆| 亚洲午夜免费视频| 亚洲中文久久精品无码ww16| 黄色免费在线网站| 国产一精品一aⅴ一免费| 国产无遮挡色视频免费观看性色| 日韩一级视频免费观看| jizz免费观看视频| 亚洲精品无码Av人在线观看国产| 日本在线观看免费高清| 免费A级毛片无码久久版| 日韩免费高清播放器| 亚洲国产精品一区第二页| 免费下载成人电影| 亚洲avav天堂av在线网爱情| 国产h肉在线视频免费观看|