繁体   English   中英

这两套代码之间的差异(字符串x Stringbuffer)

[英]Differences between these two sets of code (String x 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'";

用stringbuffer

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!!");

对于“私有静态最终字符串”,您不能真正使用StringBuffer,或者至少没有任何性能提升,甚至可能导致性能下降!

StringBuffer用于内部方法。

另外,由于您的变量是私有静态最终变量,因此所有的“ +”修饰符都会在编译时发生,并且无论如何都会进行优化,因此您会得到高度优化。 无需在此处进行任何更改。

String和StringBuffer和StringBuilder是Java的内置类。 这里的基本区别是StringBuffer和StringBuilder是可变的,而String类是不可变的。 例如:

String s="abc";
StringBuffer sb=new StringBuffer("test");

(这里s和sb都创建对堆中字符串对象“ abc”和“ test”的引用,而s和sb只是引用存储在堆中的值,而这些引用变量存储在堆栈中)。 因此,现在对s所做的任何更改都不会改变s所引用的原始值(因为字符串类是不可变的),而sb可以。 例如:

->sb.append("123");

->Test 123

现在sb将要引用的值变为“测试123”。

->s2=s.append("123");
->s2="abc 123"

其中s仍将引用相同的“ abc”。

好吧,StringBuffer中的串联比串联单个String更快。 由于您在谈论生产环境,因此您可能需要考虑使用StringBuffer还是StringBuilder。 StringBuffer是线程安全的,因此与StringBuilder相比速度较慢。

您可以在此处检查String和StringBuffer之间的区别: Java中的String和StringBuffer有什么区别?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM