String,StringBuffer,StringBuilder的区别与相同点

  1. 可变与不可变

①String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。
②StringBuilder与StringBuffer都继承自AbstractStringBuilder类AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。

  1. 是否多线程安全

①String中的对象是不可变的,也就可以理解为常量,显然线程安全。
②AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。
③StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。

  1. StringBuilder与StringBuffer共同点

①StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)
②抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。
③StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(…)。只是StringBuffer会在方法上加synchronized关键字,进行同步。

  1. StringBuilder与StringBuffer不同点

①String 字符串常量
②StringBuffer 字符串变量(线程安全)
③StringBuilder字符串变量(非线程安全)

  1. String和StringBuffer的区别

①String类是字符串常量,是不可更改的常量。
②StringBuffer类中的方法主要偏重于对于字符串的变化。
③String和StringBuffer他们都可以存储和操作字符串,即包含多个字符的字符串数据。
④StringBuffer类和String一样,也用来代表字符串。只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。
⑤所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。
⑥在StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能是完全一样的。但是,对StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。
⑦另外由于StringBuffer是线程安全的,所以在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就要稍微慢一些。
⑧StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以 接受任意类型的数据。
⑨StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用StringBuffer,如果想转成String类型,可以调用StringBuffer的toString()方法。

  1. String和StringBuilder的区别

①string字符串,为引用类型,其具有不可变性。
②我们一般认为的将内存分为五个区域。其中程序员常用的有三个,即栈、堆,静态存储区域,其中值类型的值存储在栈中,如int类型,而引用类型的值存储在堆中。
③而StringBuilder类解决了在对字符串进行重复修改的过程中创建大量对象的问题。StringBuilder类以Char为单位向字符串分配空间,所以操作中不需要进行额外的内存分配。
④如果操作少量的数据,我们可以使用string。
⑤如果有大量的字符拼接等操作,我们应使用StringBuilder。
⑥String可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了存储数值不可改变的字符串。
⑦StringBuilder是线程不安全的,运行效率高,如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用或者变量的内容不断变化,那么最好用StringBuffer。
⑧stringbuilder是变长的。
⑨string是定长的。
⑩StringBuilder是一个可变的字符序列。此类提供一个与 tringBuffer 兼容的API,但不保证同步。该类被设计用作 StringBuffer 的一个简易 替换,用在字符串缓冲区被单个线程使用的时候。
⑪StringBuilder类来源于jdk1.5及以后的版本,jdk1.4(包括1.4)之前是不存在该类的。请注意不要在jdk1.4的环境里使用StringBuilder类,否则会出错。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值