爲了搞清楚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型數據的計算更爲複雜,因此用時更久,目前沒有更深的學習和了解!
歡迎各位大神評價和指導!