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变量比较好,并说明理由。

解决方案 »

  1.   

    WeakReference :“弱引用”,即在引用对象的同时仍然允许对该对象进行垃圾回收。String a = "AAA";  a 中的 AAA是存在常量池中的,知道程序结束后才回收
    不知道是不是这个意思
      

  2.   

    大量字符串操作时, StringBuilder/StringBuffer要比String更佳为什么String会被设计为不可变类, 而导致程序运行时产生大量String对象, 这个你得去问sun的工程师...JVM会在常量池保存每个字符串, 因为String不可变, 就可以重用已有的String对象了但String str = new String("abc"); 会强制JVM去创建一个新的"abc", 而本身已经有了一个"abc"对象存在了, 所以如果使用这种方式, 将会创建出大量重复的String对象