我有硬编码的SQL查询,它使用字符串+运算符进行字符串连接,我即将用StringBuilder替换String +运算符,我只需要比较两种方法的优点和缺点。
示例代码:
insertStat = CMSCon.prepareStatement("INSERT INTO PROFILE" + " (PROFILECODE,DESCR,CTYPE," + " STAT,CR,AMOUNT,PERCENTAGE,COMB,CMETHOD," + " LASTUPDATEDUSER,LASTUPDATEDTIME,CREATEDTIME)" + " VALUES (?,?,?,?,?,?,?,?,?,?,SYSDATE,SYSDATE)");
将被这样的东西取代
StringBuilder sb = new StringBuilder();
insertStat = CMSCon.prepareStatement(sb.append("INSERT INTO PROFILE")
.append(" (PROFILECODE,DESCR,CTYPE,")
.append(" STAT,CR,AMOUNT,PERCENTAGE,COMB,CMETHOD,")
.append(" LASTUPDATEDUSER,LASTUPDATEDTIME,CREATEDTIME)")
.append((?,?,?,?,?,?,?,?,?,?,SYSDATE,SYSDATE)").toString());
无论如何,编译器将String +转换为对封面下的StringBuilder的调用。因此在您的示例中最终没有性能差异,因为最终的字节代码应该几乎相同(您可能希望使用javap来检查自己)。
因此,通常,当您必须在循环中连接数据时(例如性能很重要),您只能手动使用StringBuilder。
否则,您倾向于“更好的可读性”代码,这通常(并非总是)使用String +实现。