Java 新的DecimalFormat(模式)与DecimalFormat.applyPattern(模式)?

Java 新的DecimalFormat(模式)与DecimalFormat.applyPattern(模式)?,java,Java,我今天在使用DecimalFormat,在其中找到了一个方法applyPattern(),因此每当我必须使用DecimalFormat或SimpleDateFormat时,我都会按如下方式分配它们: private static final DecimalFormat dFormat = new DecimalFormat(pattern); private static final SimpleDateFormat dateFormat = new SimpleDateFormat(patte

我今天在使用DecimalFormat,在其中找到了一个方法applyPattern(),因此每当我必须使用DecimalFormat或SimpleDateFormat时,我都会按如下方式分配它们:

private static final DecimalFormat dFormat = new DecimalFormat(pattern);
private static final SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
private static final DecimalFormat dFormat = new DecimalFormat();
但现在我采用了另一种方法。我没有创建多个静态的最终十进制或日期格式,而是为每个格式创建了一个变量。然后在飞行中应用它们,如下所示:

private static final DecimalFormat dFormat = new DecimalFormat(pattern);
private static final SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
private static final DecimalFormat dFormat = new DecimalFormat();
private static final SimpleDateFormat dateFormat=new SimpleDateFormat()

每当我需要为其中任何一个应用新模式时,我都会这样应用:

dFormat.applyPattern(Constants.somePattern);
dFormat.format(SOMETHING);
因此,在代码审查期间,有人评论说,这种方法不利于性能。但我的观点是,我正在使我的代码更加灵活,并且我正在调用一些新的,因此创建的对象更少


有人能解释一下这一点吗。

99%的时间性能不应该考虑到这一点,选择最容易实现和理解的选项(我认为这总是在创建新的日期格式)。我怀疑你是否会经常格式化数字,使其成为你的瓶颈。鉴于这些类型不是线程安全的,我会非常小心在任何情况下都会有这样的字段…@JonSkeet,以防我使用线程。那么我应该使用静态最终DecimalFormat=new DecimalFormat(模式)方法?不,那么您应该在需要时创建一个新的
DecimalFormat
。根本不要使用静态字段。(或者,同步,或者每个线程使用一个实例。)@JonSkeet Ok将在将来注意这一点。但它不会创建越来越多的格式化对象。这与性能或内存无关,但是否有其他方法可以最小化对象创建,比如缓存。