String、StringBuilder、StringBuffer

String、StringBuilder、StringBuffer

String

特点:

  1. String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。在早期的JVM实现版本中,被final修饰的方法会被转为内嵌调用以提升执行效率。而从Java SE5/6开始,就渐渐摈弃这种方式了。因此在现在的Java SE版本中,不需要考虑用final去提升方法调用效率。只有在确定不想让该方法被覆盖时,才将方法设置为final。

  2. 底层实现是通过char数组来保存字符串的。

  3. 对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象

String为何是immutable?

  • String pool (String intern pool)的要求。
  • cache hashcode
  • Facilitating the Use of Other Objects
  • Security
  • Immutable objects are naturally thread-safe

String intern()

区别

  1. 运行速度:StringBuilder > StringBuffer > String

不是绝对的哦,如String str = “hello”+ “world”的效率就比 StringBuilder st = new StringBuilder().append(“hello”).append(“world”)要高。

  1. StringBuilder是线程不安全的,而StringBuffer是线程安全的
  2. StringBuffer有一个 toStringCache
    /**
     * A cache of the last value returned by toString. Cleared
     * whenever the StringBuffer is modified.
     */
    private transient char[] toStringCache;

面试组织语言

String类

  1. 是final,意味着不能被继承。暗示着它里面的方法也是final,不能被重写。
  2. 是immutable,意味着值创建后不能修改。例如substring()方法等都是重新new一个字符串返回。由于不可变,可用来做共享对象。
  3. 底层实现是char[]数组

Java 语言提供为字符串拼接提供了特殊自支持,它是通过StringBuilder和StringBuffer的append方法来实现的。

StringBuffer和StringBuilder的异同点:
共同点:
1. 都继承自AbstractStringBuilder,它们方法都差不多。
2. 底层实现都是char[]数组
3. 都是可变的字符序列。
区别:
4. StringBuffer是线程安全的。StringBuilder线程不安全。
5. StringBuffer有一个char[] toStringCache,用以缓存toString方法结果。
6. 运行速度而言,StringBuffer > StringBuider

结论:

  • String:适用于少量的字符串操作的情况
  • StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
  • StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

[探秘Java中的String、StringBuilder以及StringBuffer]

Java中的String,StringBuilder,StringBuffer三者的区别

[Why String is immutable in Java?](https://www.programcreek.com/2013/04/why-string-is-immutable-in-java/)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值