[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 }

 

posted on 2016-04-11 17:24  晏过留痕  阅读(135)  评论(0编辑  收藏  举报