StringBuffer和StringBuilder

来源:互联网 发布:搜索引擎客户数据分析 编辑:程序博客网 时间:2024/06/10 01:27

分析以下代码,共产生了多少个String对象

/** * Created by wjz on 2017/3/12. */public class StringTest {    public static void main(String[] args) {        String a = "a";        String b = "b";        String c = "c";        String d = "d";        String abcd = a + b + c + d;    }}
一共产生了7个对象,"a","b","c","d","ab","abc","abcd"字符串,由以上的实例看出,通过String直接相加拼接字符串的效率很低,应该使用StringBuffer和StringBuilder类,他们是对String的一种补充,例如:

/** * Created by wjz on 2017/3/12. */public class StringTest {    public static void main(String[] args) {        String a = "a";        String b = "b";        String c = "c";        String d = "d";        StringBuffer sb = new StringBuffer();        sb.append(a);        sb.append(b);        sb.append(c);        sb.append(d);                String abcd = sb.toString();   //toString方法得到sb的值        System.out.println(abcd);    }}

那么StringBuffer和StringBuilder的区别是什么呢?我们看源码:

StringBuffer中的toString方法如下:

@Override    public synchronized String toString() {        if (toStringCache == null) {            toStringCache = Arrays.copyOfRange(value, 0, count);        }        return new String(toStringCache, true);    }

使用了synchronized关键字,它是线程安全的;

StringBuilder中的toString方法如下:

@Override    public String toString() {        // Create a copy, don't share the array        return new String(value, 0, count);    }

它不是线程安全的,所以当涉及到线程安全的问题时,应该使用StringBuffer。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 美图m6充不进电怎么办 美图m6卡怎么办 手机出现无命令怎么办 深圳到香港怎么办手续 买车没有指标怎么办 北京摇号中签怎么办 深圳竞拍车牌后怎么办 冰箱玻璃门碎了怎么办 临沂麦德龙的卡怎么办 西安麦德龙超市会员卡怎么办 淮南家乐福退卡怎么办 满月宝宝眼白黄怎么办 坐飞机随身携带行李超重怎么办 婴儿换环境哭闹怎么办 美易分最后联系专员怎么办 三星手机启动不了怎么办 三星a5无法开机怎么办 三星c5死机了怎么办 三星c7无法开机怎么办 老式冰箱不制冷怎么办 电视灰屏了怎么办 沙发床放不下来怎么办 付款收据丢了怎么办 小红书登陆不上怎么办 超出范围的外卖怎么办 新氧订单过期怎么办 夏普电视遥控器失灵怎么办 西门子冰箱噪音大怎么办 高原饭煮不熟怎么办 电饭煲内胆坏了怎么办 电饭煲胶圈掉了怎么办 调温耦合器坏了怎么办 电饭煲主板坏了怎么办 meidea电饭煲出现c1怎么办 冰箱密封条长了怎么办 冰箱冷冻门变形怎么办 海尔冰箱冷藏室结冰怎么办 西门子冰箱冷藏室结冰怎么办 冰箱老是有霜冻 怎么办 冰箱里很多霜冻怎么办? 冰箱里有霜冻怎么办