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。
哪一个更好?
答案 0 :(得分:12)
StringBuilder
是单线程环境中StringBuffer
的替换,因为1.5,所以请使用StringBuilder
。如果您在事后不打算对数据进行任何其他操作,请使用String
。
答案 1 :(得分:8)
StringBuffer
并且需要同步。似乎并非如此。
此外,您的字符串似乎是一劳永逸地定义的,简单的String
就足够了。
当您通过附加内容修改“字符串”时,StringBuilder
很有趣。如果您已拥有所有内容,则无需StringBuilder
。
但是你已经可以在他们的javadocs上阅读所有这些信息了:
StringBuilder
类通常应优先于此类使用,因为它支持所有相同的操作,但速度更快,因为它不执行同步。
答案 2 :(得分:3)
字符串在Java中是不可变的,因此无论何时修改String对象,无论如何都要使用StringBuilder。如果String是不可变的,那么使用String,否则创建一个StringBuilder并在完成修改后将其转换为String。
答案 3 :(得分:1)
除非您每秒执行此方法(运行查询)数千次,否则请使用普通字符串。它是最易读,快速和紧凑的解决方案。
答案 4 :(得分:1)
你可能过于冗长。如果你的代码是
String sql = "SELECT COLUMNA,";
if(foo)
sql += "COLUMNB"
else
sql += "COLUMNC"
然后编译器实际上将优化并使用StringBuffer。
答案 5 :(得分:0)
你不应该浪费时间担心如何连接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组装两个字符串的想法很少, - 不要这样做。