我们的项目即将部署,一些要点已传递给我们。其中之一是将字符串连接交换到字符串缓冲区。
但是我们的一些字符串是 SQL 查询,而且它们非常大。当我将这些字符串作为 Stringbuffer 的参数传递时,串联仍然会发生。那么,这两套代码有什么区别吗?
没有字符串缓冲区
private static final String QUERY_CONSULTA_CIDADE_FUVIAL = "SELECT SR.ID_SUB_REGIAO FROM REGIAO_TAB_NEGC RT "
+ "INNER JOIN SUB_REGIAO_TAB_NEGC ST ON ST.ID_REGIAO_TAB_NEGC = RT.ID_REGIAO_TAB_NEGC "
+ "INNER JOIN SUB_REGIAO SR ON SR.ID_SUB_REGIAO = ST.ID_SUB_REGIAO INNER JOIN CIDADE C1 ON C1.ID_ESTADO = SR.ID_UF "
+ "WHERE RT.ID_TAB_NEGC = :idTabelaNegociacao AND C1.ID_CIDD = :idCidade AND SR.FL_FLUVIAL = 'S' AND C1.TP_REDSP_FLUV = 'S'";
使用字符串缓冲区
private static final StringBuffer QUERY_CONSULTA_CIDADE_PERTENCE_SUB_REGIAO = new StringBuffer(
"SELECT SR.ID_SUB_REGIAO FROM REGIAO_TAB_NEGC RT "
+ "INNER JOIN SUB_REGIAO_TAB_NEGC ST ON ST.ID_REGIAO_TAB_NEGC = RT.ID_REGIAO_TAB_NEGC "
+ "INNER JOIN SUB_REGIAO SR ON SR.ID_SUB_REGIAO = ST.ID_SUB_REGIAO "
+ "INNER JOIN CIDADE C1 ON C1.ID_ESTADO = SR.ID_UF AND C1.TP_CLASS_COMRC_RODO = SR.TP_CLASF "
+ "WHERE RT.ID_TAB_NEGC = :idTabelaNegociacao AND C1.ID_CIDD = :idCidade");
最佳答案
StringBuffer 的使用方式如下:
StringBuffer str = new StringBuffer ("Stanford ");
str.append("Lost!!");
对于“私有(private)静态最终字符串”,您不能真正使用 StringBuffer,或者至少没有任何性能增益,甚至可能有性能损失!
StringBuffer 用于在方法内部使用。
此外,由于您的变量是私有(private)静态最终变量,因此所有“+”修饰符都将在编译时发生,并且无论如何都会被优化,因此您将得到高度优化。此处无需更改任何内容。
关于java - 这两套代码的区别(String x Stringbuffer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28782081/