• String与“+”的拼接之创建了几个对象


    当我们写了一段String拼接的代码后
      String s = "abc";
      String ss = "bcd"+s+"def"+5;
      System.out.println(ss);
    我们通过jad反编译查看

     

    系统帮我们做了优化,创建了一个StringBuilder对象然后进行了append的拼接,但是StringBuilder会调用父类AbstractStringBuilder,AbstractStringBuilder会创建一个char[]数组,并且toString()会创建一个String对象

    也就是外部拼接的话,并且拼接的包含变量,不光是字面量的话会调用StringBuilder进行优化,创建三个对象
     
    当我们都用String拼接字面量的时候
    String s = "a" + "b" + "c" + "d" + "e";
    System.out.println(s);
    通过jad反编译查看
    这段代码只会在常量池中创建一个"abcde"的对象,如果常量池中存在"abcde"这个对象,则直接共用一个内存,不会创建对象,可以节省内存

     
    但是当我们在循环体中进行String的拼接
        String a = "0";
        for (int i = 1; i < 10; i++) {
            a = a + "M";
        }
        System.out.println(a);
    我们通过jad反编译class查看
    会在循环体中创建一个StringBuilder对象,调用super(16),传一个初始长度为16的数组,也就是父类构造函数会创建一个char[]数组对象,toString()创建一个String对象
    所以这段代码会创建 循环次数*3的对象-> 30个对象
     
    总结:
    所以,当我们在循环体中进行String拼接的时候,我们应该使用StringBuilder来进行append拼接,避免使用String,减少对象的创建

     参考:https://blog.csdn.net/java2000_net/article/details/3681385
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    Loadrunner中web_find和web_reg_find函数的使用与区别
    性能测试之LoardRunner 检查点
    性能测试之LoardRunner 自动关联
    性能测试之LoardRunner 手动关联二
    性能测试之LoardRunner 手动关联一
    性能测试之LoadRunner11 破解
    JavaScript break跳出多重循环
    如何将jsp页面的table报表转换到excel报表导出
    Word撤销键(Ctrl+z)无效的解决方法
    sql执行顺序
  • 原文地址:https://www.cnblogs.com/xiexiaofei/p/14121457.html
Copyright © 2020-2023  润新知