大二狗第二次寫博客

爲了搞清楚String a = "wenqiao"; 和 String a = new String("wenqiao");的區別
作了小實驗
實驗猜測:第一種方法 字符串存儲在常量池中,且常量池中只會有一個"wenqiao";第二種方法 字符串存放在堆中 且每一個"wenqiao"都是不同的對象
實驗結果:
圖片描述
圖片描述
圖片描述數組

第二種方法速度明顯慢於第一種,當運行次數達到必定次數後,堆內存溢出,符合實驗指望。學習

可是..溫喬一開始實驗時結果並非這樣…而是spa

狀況一:
圖片描述code

時間明顯較短,甚至還有這樣的狀況對象

狀況二:
圖片描述blog

狀況三:
圖片描述圖片

出現這些狀況的表面緣由:
狀況一:內存

for(int i=0;i<1000000000;i++){
            String a1 = "wenqiao";
    }
    for(int i=0;i<1000000000;i++){
            String a2 = new String("wenqiao");
    }

最上面截圖的代碼中,在for循環外定義了很長的字符串數組用於存放每一個字符串,而這三個都是for循環內部定義了局部變量。緣由猜測: ①不明白爲何時間明顯縮短??但願有大神指導 ②堆內存沒有溢出:局部變量a1被存放在棧中,每次循環結束後,該引用生命到期,對應在堆內的字符串成爲垃圾被回收字符串

狀況二:it

for(long i=0;i<1000000000;i++){
            String a1 = "wenqiao";
    }
    for(int i=0;i<1000000000;i++){
            String a2 = new String("wenqiao");
    }

狀況三:

for(long i=0;i<1000000000;i++){
            String a1 = "wenqiao";
    }
    for(long i=0;i<1000000000;i++){
            String a2 = new String("wenqiao");
    }

這兩種狀況顯示:當i爲long型基本變量時,代碼執行時間比int要久不少
緣由猜測:
對long型變量進行操做時耗時比int久
實驗:
代碼:

long i;
    for(i = 0 ;i < 1000000000;i++){
        
    }
    int j;
    for(j = 0 ;j < 1000000000;j++){
        
    }

結果

圖片描述

猜測:是由於long型數據大小爲8bytes,而int爲4bytes,其操做時對long型數據的計算更爲複雜,因此用時更久,目前沒有更深的學習和了解!

歡迎各位大神評價和指導!

相關文章
相關標籤/搜索