这两组代码之间的差异(String x Stringbuffer)

时间:2015-02-28 13:11:23

标签: java string stringbuffer

我们的项目接近部署,并向我们传递了一些要点。其中之一是将字符串连接交换为字符串缓冲区。

但我们的一些字符串是SQL查询,它们非常大。当我将这些字符串作为Stringbuffer的参数传递时,连接仍然会发生。那么,这两组代码之间有什么区别吗?

没有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");

3 个答案:

答案 0 :(得分:2)

StringBuffer将按如下方式使用:

 StringBuffer str = new StringBuffer ("Stanford ");
 str.append("Lost!!");

用于"私有静态终结字符串"你不能真正使用StringBuffer,或者至少没有任何性能提升,甚至可能性能损失!

StringBuffer用于方法内部。

此外,由于您的变量是私有静态决赛,所有' +'修饰符将在编译时发生,并且无论如何都将进行优化,因此您将得到高度优化。这里不需要改变任何东西。

答案 1 :(得分:1)

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”。

答案 2 :(得分:0)

嗯,StringBuffer中的连接比连接单个字符串要快。由于您在谈论生产环境,您可能需要考虑是否使用StringBuffer或StringBuilder。 StringBuffer是线程安全的,因此与StringBuilder相比较慢。

您可以在此处检查String和StringBuffer之间的差异:What is the difference between String and StringBuffer in Java?