读书人

String解决方法

发布时间: 2012-01-02 22:40:04 作者: rapoo

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对象
[解决办法]
见识了

读书人网 >Java Web开发

热点推荐