日期:2014-05-20  浏览次数:20610 次

关于String类型的对象初始化问题
众所周知,String是一个特殊的引用类型,那么再给它初始化的时候我通常使用这两种方式:
1.直接赋值:String s = "1234567890";
2.new对象: String s = new String("1234567890");

请问这两种方式哪一种效率更高或者有其他的好处?怎么用程序去验证这其中的差距呢??其实我最初是想用计时器去算运行的秒数,但是不知道可不可行。

笔者追加了一个程序去验证它们俩的用时,却得到了一个不想要的结果:
import java.util.Calendar;

public class String类型效率比较1 {

public static void main(String[] args) {
Calendar rightNow1 = Calendar.getInstance();
System.out.println(rightNow1.getTimeInMillis());


for(int i=1;i<=2000;i++){
String s1="12345678901";
System.out.println(s1);
}

Calendar rightNow2 = Calendar.getInstance();
System.out.println(rightNow2.getTimeInMillis());


for(int i=1;i<=2000;i++){
String s2=new String("12345678902");
System.out.println(s2);
}

Calendar c2=Calendar.getInstance();
System.out.println(c2.getTimeInMillis());
}

}

其中new String()得到的对象创建过程竟然比直接给String变量赋值过程用时短的多,为什么呢??

------解决方案--------------------
String s1 = new String("12345678901")
其实创建了俩对象。
------解决方案--------------------
探讨

什么是FGC()呢?我没查到呢,能再详细点吗?多谢!引用:
我在附加一句吧,拿3楼的例子来说,大量的new,会产生大量的无用的对象,众所周知,java是自己清理垃圾的,当年轻代的空间不足,或者年老带不足,会引发GC活着FGC,而GC和FGC都是需要时间的,尤其是FGC会耗费大量的时间。所以不能疯狂的new。如果经常使用一个字符串,那就定义成常量,每次都是使用同一份。就如这样……