String
import   java.lang.ref.WeakReference; 
 /** 
    *   Class   to   research   strings.    
    *   constant   string   like    "AAA "   won 't   be   reclaimed   while   instance   created   by   new   will.    
    */ 
 public   class   StringResearch   {   
 	public   static   void   main(String[]   args)   { 
 		String   a   =    "AAA ";    
 		String   b   =   new   String( "AAA ");      
 		WeakReference   wra   =   new   WeakReference(a);    
 		WeakReference   wrb   =   new   WeakReference(b);     		 
 		a   =   null;    
 		b   =   null;      
 		System.gc();     		 
 		System.out.println(wra.get());    
 		System.out.println(wrb.get());   		 
 	}   
 }   
 程序输出如下 
 AAA 
 null   
 根据以上结果,请说明通常情况下如何定义新的String变量比较好,并说明理由。 
------解决方案--------------------up
------解决方案--------------------WeakReference :“弱引用”,即在引用对象的同时仍然允许对该对象进行垃圾回收。   
 String a =  "AAA ";  a 中的 AAA是存在常量池中的,知道程序结束后才回收 
 不知道是不是这个意思 
------解决方案--------------------大量字符串操作时, StringBuilder/StringBuffer要比String更佳   
 为什么String会被设计为不可变类, 而导致程序运行时产生大量String对象, 这个你得去问sun的工程师...   
 JVM会在常量池保存每个字符串, 因为String不可变, 就可以重用已有的String对象了   
 但String str = new String( "abc "); 会强制JVM去创建一个新的 "abc ", 而本身已经有了一个 "abc "对象存在了, 所以如果使用这种方式, 将会创建出大量重复的String对象
------解决方案--------------------见识了