繁体   English   中英

String或StringBuffer

[英]String or StringBuffer

private void doShareEmp(pageBean UTIL, HttpServletRequest request, String page)
        throws Exception
{
    doAction(request, UTIL, page);
    String action = pageBean.getSafeRequestOrNullParameter(request, "DO");
    long empRecNum = UTIL.getNumValue("EMPLOYEE", "REC_NUM");
    if (action != null)
    {
        if (action.startsWith("US:"))
            unshareEmployee(request, UTIL, action.substring(3));
        else if (action.equals("SHARE") && empRecNum != 0)
            shareEmployee(request, UTIL, empRecNum);
    }
    ListBean list = UTIL.getListBean(request, "EMPSHARELIST", true);
    if (empRecNum != 0)
    {
        StringBuffer sql = new StringBuffer();
        sql.append("SELECT FLDREC_NUM, FLDCOMPANY, FLDLOCATION, FLDDEPT FROM @SCHEMAEMPLVIEW WHERE FLDEMPLOYEE = ? AND FLDTABLE='SHARED' ORDER BY FLDCOMPANY, FLDLOCATION, FLDDEPT");
        ArrayList qryParms = new ArrayList();
        qryParms.add(new Long(empRecNum));
        list.setQuery(UTIL, sql, qryParms);
    }
    else
        list.init();
}

在这段代码中,我将查询附加到StringBuffer。

哪一个会更好?

  1. 的StringBuffer
  2. StringBuilder的

StringBuilder是更换到StringBuffer在自1.5单线程环境,所以一起去StringBuilder 如果您事后不打算对数据进行任何其他操作,请使用String

StringBuffer只在线程环境中需要,如果需要同步。 在这似乎并非如此。

此外,您的字符串似乎是一个定义,一个简单的String就足够了。 当您通过附加内容修改“字符串”时, StringBuilder很有趣。 如果您已经拥有所有内容,则不需要StringBuilder

但是你已经可以在他们的javadoc上阅读所有这些信息了:

StringBuilder类通常应优先于此使用,因为它支持所有相同的操作,但速度更快,因为它不执行同步。

字符串在Java中是不可变的,因此无论何时修改String对象,无论如何都要使用StringBuilder。 如果String是不可变的,那么使用String,否则创建一个StringBuilder并在完成修改后将其转换为String。

除非您每秒执行此方法(运行查询)数千次,否则请使用普通的String。 它是最易读,快速和紧凑的解决方案。

你可能太冗长了。 如果您的代码是

String sql = "SELECT COLUMNA,";
if(foo)
    sql += "COLUMNB"
else
    sql += "COLUMNC"

然后编译器实际上将优化并使用StringBuffer。

你不应该浪费时间担心如何连接2个字符串。 这不是一个伟大的程序员的标志,如果这是你的想法。

试试这个 - >

long finalTime1 = 0; {
long initialTimeTest = System.currentTimeMillis();
for(int index = 0; index <10000; index ++){StringBuilder sb = new StringBuilder(“Hello,”)。append(“World”); 的System.out.println(sb.toString()); }
finalTime1 = System.currentTimeMillis() - initialTimeTest;

}

long finalTime2 = 0; {
long initialTimeTest = System.currentTimeMillis();
for(int index = 0; index <10000; index ++){String sb =“Hello,”+“World”; System.out.println(sb); }
finalTime2 = System.currentTimeMillis() - initialTimeTest;
}

System.out.println(finalTime1); System.out.println(finalTime2);

结果:

......你好,世界你好,世界245 148

您认为字符串缓冲区更快吗?

我们打破了所有规则的母亲:保持简单。 -

对于普通的字符串处理,没有理由使用StringBuilder。 它只是为平凡的任务增加了不必要的复杂性。

请,我们需要考虑BIG,考虑模块对项目的整体业务影响。 讨论我们是否将使用StringBuilder或String组装两个字符串的想法很少, - 不要这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM