java學習筆記(String類)

轉載自:http://blog.csdn.net/xiazdong/article/details/6723101

一、兩種實例化方式:

String str = “abc”;

String str = new String("abc");

一個字符串就是String的匿名對象。

"hello".equals(str)    一個字符串能夠調用一個函數,可以看出,一個字符串是String的匿名對象。

二、比較

(1)直接賦值

String str = “abc”;表示一個堆內存指向給了棧內存。

注意:直接賦值可以節省內存

舉例:

  1. public class StringDemo01{  
  2.     public static void main(String args[]){  
  3.         //享元模式  
  4.         //在堆內存中有一個"hello"的String對象,而str1和str2和str3指向這個匿名對象  
  5.         String str1 = "hello";  
  6.         String str2 = "hello";  
  7.         String str3 = "hello";  
  8.         System.out.println("str1 == str2  --> "+(str1 == str2));   
  9.         System.out.println("str1 == str3  --> "+(str1 == str3));   
  10.         System.out.println("str2 == str3  --> "+(str2 == str3));   
  11.     }  
  12. }  

(2)new

舉例:

  1. public class StringDemo01{  
  2.     public static void main(String args[]){  
  3.           
  4.         String str1 = new String("hello");  
  5.         String str2 = new String("hello");  
  6.         System.out.println("str1==str2 -->"+(str1==str2));   
  7.     }  
  8. }  

1.創建了"hello"的匿名String對象。

2.創建一個str的對象,並開闢新的堆空間。

3.原來的“hello”的匿名對象變成垃圾。


注意:因此開發中最好使用直接賦值。

 

三、字符串的不可改變性


爲什麼str+="world"這種連接操作效率低,就是因爲這個,所以纔會有StringBuilder或者StringBuffer。

四、String和StringBuilder的性能比較

  1. public class StringDemo02{  
  2.     public static void main(String args[]){  
  3.         long begin1 = System.currentTimeMillis();  
  4.         String str = "";  
  5.         for(int i=0;i<10000;i++){  
  6.             str+=i;  
  7.         }  
  8.         long end1 = System.currentTimeMillis();  
  9.         System.out.println("String用時: "+(end1-begin1)+" ms");    //用時2000ms  
  10.           
  11.   
  12.         long begin2 = System.currentTimeMillis();  
  13.         StringBuilder sbuilder = new StringBuilder();  
  14.         for(int i=0;i<10000;i++){  
  15.             sbuilder.append(i);  
  16.         }  
  17.         long end2 = System.currentTimeMillis();  
  18.         System.out.println("StringBuilder用時: "+(end2-begin2)+" ms");//用時0ms,所以快了很多  
  19.     }  
  20. }  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章