java - 这两套代码的区别(String x Stringbuffer)

标签 java string stringbuffer

我们的项目即将部署,一些要点已传递给我们。其中之一是将字符串连接交换到字符串缓冲区。

但是我们的一些字符串是 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/

相关文章:

c++ - 为什么 stringstream::str() 会截断字符串?

java - StringBuilder 与 StringBuffer - 需要助记符

java - 有没有办法将文件的 1/4 写入字符串缓冲区?

java - 无法以多部分形式发布图像

java - 如何从任何地方访问安装在 Kubernetes 上的服务?

java - JDesktopPane - 最小化 JInternalFrames

c - 手动解析字符串

java - 在字符串或整数之间添加点以创建双 JAVA

java.security.AccessControlException : access denied when running applet on browser

java - 最好将某些内容存储在内存中还是尝试逐行写入文件?