有个朋友说
Stringbuffer里用加号,和用append追加数据是一样的。
自己搜了下没有找到答案。StringBuffer sql = new Stringbuffer();
//这种情况sql.append("abc"+"123");
//和这种情况 sql.append("abc").append("123");个人认为在StringBuffer中使用+号貌似就等于在用string+string,也是很消耗内存的操作……求大牛简单解释下

解决方案 »

  1.   

    我赞成楼主的说法!~
    因为sql.append("abc"+"123");是先把括号里面的两个字符串通过+操作符拼接成一个字符串后再追加到sql后面的,这样在+操作符时会额外消耗内存!~
      

  2.   

    如果是字符串常量相加,编译器会进行优化的,直接把他们加在一起,所以如果你的sql语句若没有
    “+变量+” 这种形式,虽然sql语句很长,但是用+拼起来是要好些的
      

  3.   

    java没有运算符重载,但为了方便特准String可以使用“+”和“+=”。所以StringBuffer不存在使用“+”的情况。
    sql.append("abc"+"123");
    就是StringBuffer的一次append方法调用,而方法的参数是先执行了一次String+String得来的。
    这样写虽然稍微耗点内存,但是是允许的。因为这里连接的是sql语句,可读性的要求大于性能的要求。
      

  4.   

    还有一种情况,
    比如一条sql语句单行  很长 
    String str ="1111………………";写成
    String str= "111111"+
                "111111"+
                "111111"+
                "111111"+
                "111111"+
                "111111";
    这样,和上面的相比,虽然提高了可读性,但是内存的消耗也变了呢?
    发现PL/SQL中就给了一个复制到java的小功能
    就是将美化好的sql  用+号拼接起来 方便复制到java代码中
    感觉一条很长的sql这样写到代码里消耗很大。
    而且这样的sql很多很多,不敢下手啊
      

  5.   

    String str= "111111"+
      "111111"+
      "111111"+
      "111111"+
      "111111"+
      "111111";
    与StringBuffer str = new StringBuffer("111111")
        .append("111111")
        .append("111111")
        .append("111111")
        .append("111111");
    在可读性上没啥区别。
    sql.append("abc"+"123");的原因是因为这样类型的语句:String sql = "select * from table"
        +  "where"
        +  " aa like \'%\'||" + ? + "||\'%\'";
    测试StringBuffer就应该写成StringBuffer sql = new StringBuffer("select * from table")
        .append(" where");
        .append(" aa like \'%\'||" + ? + "||\'%\'");
      

  6.   

    看这里http://www.ticmy.com/?p=69
      

  7.   

    StringBuffer sql = new StringBuffer("select * from table")
        .append(" where");
        .append(" aa like \'%\'||" + "?" + "||\'%\'");以微量的性能换取了可读性,
    而StringBuffer sql = new StringBuffer("select * from table")
        .append(" where");
        .append(" aa like \'%\'||")
        .append(?)
        .append("||\'%\'");则是牺牲了可读性换取微量的性能。
      

  8.   

    在jdk1.4之后下面的写法根本没有带来任何性能提升,编译的时候都已经转换成下面的形式了,且比下面的形式更好,把常量的连接在编译器做掉了,而这个下面的写法要到运行期才做
      

  9.   

    感谢各位的回答,
    貌似现在的结果是JDK1.4以后
    string的+和stringBuffer的append已经没有差别了?
      

  10.   

    当然有差别,详细的讨论这里面已经包含了http://www.ticmy.com/?p=69