【问题标题】:Java String best practicesJava 字符串最佳实践
【发布时间】:2015-07-18 08:20:00
【问题描述】:

我在 Java 中有 4 个字符串参数(来自请求对象)

String dd = req.getParameter(dd);
String mm = req.getParameter(mm);
String yyyy = req.getParameter(yyyy);

在验证 dd,mm,yyyy 之后,我正在构建日期 在某些地方再次通过 buildingString date = dd+"/"+mm+"/"+yyyy; 在第 4 个字符串变量中创建对象我需要替换日期 格式如下,

date = yyyy+mm+dd;
date =mm+"/"+dd+"/"+yyyy;  // storing in db need this format

由于需要传递 4 个对象,将消耗多少内存 直到坚持在桌子上?它是更昂贵的记忆调用吗?有没有最佳实践? Stringpool 中到底有多少个字符串对象?

【问题讨论】:

  • 不要担心像这样对对象进行微观管理;像 JVM 这样的托管内存系统经过广泛优化,能够有效地处理这些操作。以最容易阅读的方式编写代码。但是,您可以考虑使用日期格式化程序而不是手动构造字符串。
  • 在我看来,最好的做法是使用日历/日期。
  • 对于大多数用例,您可以这样做。您也可以为此使用 StringBuilder,但由于您只创建一次字符串,因此不会有太大的不同
  • 尽快将信息放入适当的日期表示对象中,并且仅在有要显示的内容时才创建字符串(使用格式)。在 Java 8 中,使用新的 java.time 包。在早期版本中,使用 Date 和/或 Calendar 或 JodaTime。保存到数据库时不要使用字符串。
  • @RealSkeptic 是的,我同意你的观点,同时坚持在 db 中我只将日期转换为 Java.util.date 对象

标签: java string memory


【解决方案1】:

我的建议是你不应该像其他人建议的那样担心微观改进。可能是创建一个包装器对象,例如MyDate 并构造一次 Date 对象。之后,您可以使用不同的格式化程序来格式化您的日期。

package com.dd;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.joda.time.LocalDate;

public class MyDate {

    private Date date;

    public MyDate(Request req) {
        int day = req.getParameter("dd");
        int month = req.getParameter("mm");
        int year = req.getParameter("yyyy");
        date = new LocalDate(year, month, day).toDate();
    }

    public String format(String givenFormat) {
        SimpleDateFormat sdf = new SimpleDateFormat(givenFormat);
        return sdf.format(date);
    }

}

注意 - 您需要确认并验证您从请求中获得的值以及它们是否与LocalDate 预期的符号相同

【讨论】:

  • 您不应该将 SimpleDateFormat(与 java.util.Date/.Calendar 一起使用)与 Joda-Time 混合使用。 Joda-Time 有自己的格式化程序类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 2017-09-07
相关资源
最近更新 更多