• String,StringBuffer 和 StringBuilder 的区别


    首先,String,字符串常量,长度不可变,而StringBuffer和StringBuild作为字符串变量,值是可变的。由于这种区别,所以,但String的值改变的时候,它会检查内存中有没有相似的值,如果有,则直接拿过来,如果没有,则从新生成一个对象。如:

    String str1 = "x";
    String str2 = "x";

    在这里,其实只生成了一个对象。再比如:

    String str1 = "x";
    String str2 = "y";

    //另一中情况
    String str1 = "x";
    str1 = "y";

    上面两种情形都改变了String的值(这里可以理解为 str1,str2 引用了两个不同的值?),所以都重新生成了一个对象。

    再来看看StringBuffer,StringBuffer作为一个变量,他的值是可变的,所以不管我们有没有改变它的值,它都只生成了那一个对象。如:

    //改变值
    StringBuffer sb = new StringBuffer();
    sb.apend("x");
    sb.append("y");

    //另一中情况,不改变实际值
    StringBuffer sb = new StringBuffer();
    sb.append("x");
    sb.replace(0,1,"x");

    像上面这样,不管我们有没有改变StringBuffer的值,他都不会重新生成对象,而是从新调用最开始new的那个对象。

    而StringBuilder在这点上和StringBuffer是一致的。

    StringBuffer 和StringBuilder 的区别

    StringBuffer是同步的而StringBuilder是异步的,在有安全的要求下,我们只能使用StringBuffer,如果没有的话,我们就可以使用StringBuilder,因为StringBuilder的效率更高。

    而在效率方面的对比,从高到底,依次是:StringBuilder > StringBuffer > String (也有人说结果更这个恰恰相反,可我没做个试验,只能个人感觉应该是这样)

    PS:其实写下这篇随笔我的心一直在忐忑,因为我自己对这个概念也有点模糊,如果哪里有不对的地方,恳请大家指正,谢谢。







  • 相关阅读:
    Django的mode的分组查询和聚合查询和F查询和Q查询
    Django的models操作
    django复习--学校管理系统用到的知识点梳理
    django做form表单的数据验证
    一个不错的git资源站点
    php异常处理
    laravel自定义验证
    docker从容器中怎么访问宿主机
    laravel 之jwt认证使用详解
    laravel更改默认的登录密码加密方式
  • 原文地址:https://www.cnblogs.com/xiaxinggege/p/2303039.html
Copyright © 2020-2023  润新知