string ,stringbuffer ,stringbuilder演进及使用场景和解决的问题

目录

前言:

一、出现顺序

String

StringBuffer

StringBuilder

二、string/stringbuffer和stringbuilder演进

1.String

a.概述

b.适用场景:

2.StringBuffer

a.概述

b.适用场景

3.StringBuilder

a.概述

b.适用场景



前言:

最近在学习的时候对比了String,StringBuffer,StringBuilder的区别,但是不清楚他们是怎么来的,为什么有了String还会有StringBuffer和StringBuilder,以及它们都解决了什么问题?。所以通过看源码版本号,注释等可以了解等他们的详情:

一、出现顺序

通过三张图对比他们的前世今生

String

StringBuffer

StringBuilder

二、string/stringbuffer和stringbuilder演进

1.String

a.概述

  • String类被声明为不可变类,用final修饰,被声明为final class ,所有的属性也是用final修饰,也表明这个类不能被继承。
  • String不可变的第二点是,用来存储字符串的char value[]数组被private和final修饰,当一个被final修饰的基本数据类型的变量,则其数值一旦在初始化之后便不能更改。

b.适用场景:

用到的字符串经常不会变动

可以看见被final修饰

2.StringBuffer

a.概述

        因此他的对象是不可变的,在每次创建对象,字符串拼接都会产生新的对象,如果操作频繁或者创建的对象很多,效率就很差,容易导致内存溢出,因此为了解决这种问题,产生了StringBuffer,每次产生的新对象都是以追加的方式产生对象,不会重新创建已经创建过的对象,在原来的有序序列末尾或者指定位置添加,提供了append和insert方法。

         但是StringBuffer的很多方法都用synchronized修饰,他是一个线程安全的可修改的字符序列,它保证了线程安全,那么相应的效率也就会降低,会在添加字符的时候带来额外的性能开销,如果是不考虑线程安全用它效率就比较差了。

b.适用场景

在频繁进行字符串运算(如拼接、替换、删除等),并且运行在多线程环境中,则可以考虑使用StringBuffer

StringBuffer方法加上了synchronized

3.StringBuilder

a.概述

         所以为了解决效率差,在java1.5提出了StringBuilder,功能和StringBuffer没有本质区别,就是将方法上的synchronized去掉了,在增加字符序列,字符拼接的时候极大提高了效率。

b.适用场景

        在频繁进行字符串运算(如拼接、替换、和删除等),并且运行在单线程的环境中

如下图:

StringBuilder的方法去掉了synchronized关键字。

 

 

评论 57
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值