您可以为使用一个或另一个更好,更快,更正确的变体提供什么参数。
第一个变体:
StringBuffer sql = new StringBuffer("SELECT DISTINCT f.ID ")
.append("FROM FIRST_TABLE F ")
.append("LEFT JOIN SECOND_TABLE s ON f.ID = s.F_ID ")
.append("WHERE ")
.append("F.BOOL = 1 ")
.append("AND S.DATE IS NOT NULL ")
.append("AND S.CLOSED = 0 ");
第二种变体:
String sql = "SELECT DISTINCT f.ID " +
"FROM FIRST_TABLE F " +
"LEFT JOIN SECOND_TABLE s ON f.ID = s.F_ID " +
"WHERE "
"F.BOOL = 1 " +
"AND S.DATE IS NOT NULL " +
"AND S.CLOSED = 0";
*表示注释:Class String和Class StringBuffer。
答案 0 :(得分:11)
第二个更好:
即使执行时间连接 是必需的(例如,你有一个变量),编译后的代码将使用StringBuilder
或StringBuffer
所需的位置(取决于您要定位的Java版本。
请注意,如果您正在执行数据库查询,效率将完全无关紧要。
答案 1 :(得分:0)
你不应该浪费时间担心如何连接几个字符串。使用2并保持清晰。使用StringBuilder / buffer不是一个伟大的程序员的标志,如果这是你的想法。
担心模糊定义的要求和计划背后的事情。
试试这个 - >
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 / Builder或String组装一些字符串的想法很少, - 不要这样做。
关于表现的问题,我建议:http://cfd.gmu.edu/~jcebral/academics/csi702/notes/02-optimization.pdf