[Java] 01 String 内存分析
1 public class StringTest{ 2 public static void main(String[] args){ 3 String str1 = new String("123"); 4 String str2 = new String("123"); 5 //str1和str2指向不同的内存 6 System.out.println(str1==str2);//false 7 System.out.println(str1.equals(str2));//true 8 9 String str3 = "123"; 10 String str4 = "123"; 11 System.out.println(str3 == str4);//str3和str4指向同一块内存 true 12 System.out.println(str3.equals(str4));//true 13 14 str3 = "234"; 15 str4 = "456"; 16 str4 = "789"; 17 String str5 = "456"; 18 //字符串常量,只要声明了就有内存分配,即使没有指向也不会被垃圾回收,str5不会再分配内存,因为已经存 19 //在"456"这块内存,直接被指向。 20 21 /** 22 * 由于String是字符串常量,每新建一个字符串就会分配一块内存,此时以下循环会分配100块 23 * 内存,但只有最后一块被使用,而且String Pool中的内存不会被回收,所以如果进行大量字符串叠加,请勿 24 * 使用此方法 25 */ 26 String str6 = ""; 27 for(int i=0;i<100;i++){ 28 str6+=i; 29 } 30 System.out.println(str6); 31 32 /** 33 * 字符串叠加用此方法 34 */ 35 StringBuilder sb = new StringBuilder("abc"); 36 for(int i=0;i<100;i++){ 37 sb.append(i); 38 } 39 System.out.println(sb.toString()); 40 } 41 }
------------------------------------------------------------------
Always put yourself in the other's shoes.If you feel that it hurts you,it probably hurts others,too.------------------------------------------------------------------