StringBuilder  很长就得注意效率了...

解决方案 »

  1.   

    StringBuffer或StringBuilder都行,看你喜欢哪个。
      

  2.   

    首先 就是 我之前用的是"+"来拼接的           有很长很长   然后老大就让我换种方式     但是如果还是使用StringBuilder的话    代码美观上面肯定是不行的
      

  3.   

    StringBuilder,StringBuffer 一行一个.append("")  啊,不难看。之所以让该是因为+操作对字符串是很损耗性能的行为!
      

  4.   


    StringBuilder用不好的话  和加号没区别
      

  5.   

    StringBuffer或StringBuilder都行,个人倾向于StringBuffer
      

  6.   


    StringBuilder用不好的话  和加号没区别
    StringBuilder 还需要中么用 ?
      

  7.   


    StringBuilder用不好的话  和加号没区别
    StringBuilder 还需要中么用 ?需要预先考虑好长度 创建的时候分配好  否则默认就是16个字符  不够就扩容  扩容浪费的资源和加号是一样的
      

  8.   


    按Java代码规范写就可以
    如果关注性能 就用 StringBuild 或 StringBuffer
      

  9.   


    StringBuilder用不好的话  和加号没区别不知道这位兄台有没有这几试过一下的这段代码?? String s = "1";
    long start = System.currentTimeMillis();
    for (int i=0;i<10000;i++) {
    s += i;
    }
    long end = System.currentTimeMillis();
    System.out.println("cost:" + (end - start));

    //***********
    StringBuilder builder = new StringBuilder();
    builder.append("1");
    start = System.currentTimeMillis();
    for (int i=0;i<10000;i++) {
    builder.append(i);
    }
    end = System.currentTimeMillis();
    System.out.println("cost:" + (end - start));
      

  10.   


    StringBuilder用不好的话  和加号没区别不知道这位兄台有没有这几试过一下的这段代码?? String s = "1";
    long start = System.currentTimeMillis();
    for (int i=0;i<10000;i++) {
    s += i;
    }
    long end = System.currentTimeMillis();
    System.out.println("cost:" + (end - start));

    //***********
    StringBuilder builder = new StringBuilder();
    builder.append("1");
    start = System.currentTimeMillis();
    for (int i=0;i<10000;i++) {
    builder.append(i);
    }
    end = System.currentTimeMillis();
    System.out.println("cost:" + (end - start));
    不知道这位老兄知不知道java会把加号编译成stringbuilder  除了循环里的
      

  11.   


    StringBuilder用不好的话  和加号没区别不知道这位兄台有没有这几试过一下的这段代码?? String s = "1";
    long start = System.currentTimeMillis();
    for (int i=0;i<10000;i++) {
    s += i;
    }
    long end = System.currentTimeMillis();
    System.out.println("cost:" + (end - start));

    //***********
    StringBuilder builder = new StringBuilder();
    builder.append("1");
    start = System.currentTimeMillis();
    for (int i=0;i<10000;i++) {
    builder.append(i);
    }
    end = System.currentTimeMillis();
    System.out.println("cost:" + (end - start));
    不知道这位老兄知不知道java会把加号编译成stringbuilder  除了循环里的  循环里的会每次就new一个stringbuilder  慢的原因是在这里  所以在循环外加号和stringbuilder是一样的  但是如果设置定长  要更优
      

  12.   


    StringBuilder用不好的话  和加号没区别不知道这位兄台有没有这几试过一下的这段代码?? String s = "1";
    long start = System.currentTimeMillis();
    for (int i=0;i<10000;i++) {
    s += i;
    }
    long end = System.currentTimeMillis();
    System.out.println("cost:" + (end - start));

    //***********
    StringBuilder builder = new StringBuilder();
    builder.append("1");
    start = System.currentTimeMillis();
    for (int i=0;i<10000;i++) {
    builder.append(i);
    }
    end = System.currentTimeMillis();
    System.out.println("cost:" + (end - start));
    不知道这位老兄知不知道java会把加号编译成stringbuilder  除了循环里的  循环里的会每次就new一个stringbuilder  慢的原因是在这里  所以在循环外加号和stringbuilder是一样的  但是如果设置定长  要更优
    -去看了哈javap,虽然很多指令看不懂,但循环上大体还是看明白了,确如兄台所言,s+的循环中是每次都new一个StringBuilder..  并且用笨办法在循环外粘贴了几千行s+来做测试,和循环外的StringBuilder.append确实相差不多..  今天小弟又涨见识了,多谢。
      

  13.   

    StringBuffer或StringBuilder   这个效率会高一些。    String不行  每次他都会在内存里面创建一个对象  很耗内存的~
      

  14.   

    如果需要循环拼接字符串,那么当然选择StringBuilder,如果在循环外,那直接用加号也没什么问题。
    至于什么StringBuilder扩容性能损耗的问题,我只想说你以为操作内存慢得和磁盘IO一样?真正慢的是太多新对象的创建和垃圾回收,只要你能减少创建不必要的中间对象就能提高性能。