public class Test {
//private static final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static Map<String,DateFormat> cache = new HashMap<String,DateFormat>();
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
for(int i=0;i<=10;i++){
formate(new Date());
}
long endTime = System.currentTimeMillis();
System.out.println(endTime-startTime);


}

public static String formate(Date date){
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//这里是否每次都生成一个新的对象,换成全局的效率比这个高,具体原因是不是这个?
return df.format(date);
}
}问题在注释中!

解决方案 »

  1.   

    可是我在format方法中打印出df输出的结果都是一个相同的地址啊,这是什么原因啊?
      

  2.   

    你改成这样看行不?public static String formate(Date date){ 
       DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       return df.format(date).toString(); 
      

  3.   

    public static String formate(Date date){ 
       DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       System.out.println(df);//十次循环输出的是同一地址
       System.out.println(new Test());//十次循环输出的是十个不同的地址
       return df.format(date).toString(); 
    } 上面的是什么原因呢?toString()方法也没有被重载过。
      

  4.   

    结果正确啊,df.format(date).toString();有什么意义呢,df.formate(date)在函数中调用过toString()方法了,我上面的注释搞不明白跟toString()有什么关系呢? 能解释下上面的注释到底是什么原因呢?谢谢了!
      

  5.   

    SimpleDateFormat 好像记得是 sun实现这个东西时候的一个bug。
    在多线程情况下,问题突出。