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







  • 相关阅读:
    hdu 1269 迷宫城堡(trajan判环)
    codeforces 591 E. Three States(bfs+思维)
    PowerDesigner 教程
    SQL中inner join、outer join和cross join的区别
    SQL 报表 --简易进销系统
    SQL PROMPT5.3.4.1的一些设置选项
    SQL锁机制和事务隔离级别
    洛谷P1901 发射站
    洛谷P1823 [COI2007] Patrik 音乐会的等待
    洛谷P2947 [USACO09MAR]向右看齐Look Up
  • 原文地址:https://www.cnblogs.com/xiaxinggege/p/2303039.html
Copyright © 2020-2023  润新知