String,StringBuffer 和StringBuilder三者的区别

前言

笔者因为遇到这样的面试题答的不够全面,经过谷歌后在这里和大家说下,还会跟大家聊一下其应用的场景(笔者不怎么喜欢背书式地将教科书上的内容拿出来讲,除非真的很必要)

String

String 对象一旦被创建,它就不能被修改,其对象会被存储在String 常量池中。String 对象不能同时地被两个线程使用。

StringBuffer

StringBuffer是可修改的,意味着StringBuffer 声明的对象的值是可变的。而StringBuffer 创建的对象都会别存放在堆(heap)中,StringBuffer 和StringBuilder 有着相同的方法,但在StringBuffer的方法中,如果其方法是同步的,那么StringBuffer线程安全。
由于它不允许两个线程同时访问同一个方法,每个方法都只能由一个线程访问一次。但是线程安全也会带来缺点,那就是性能会大大折扣。因此当调用每个类的方法相同时,StringBuilder 的速度要快于StringBuffer.(这个在面试中常被问到)。
如果StringBuffer 要转换为String 可以用toString()方法。

StringBuilder

StringBuilder 和StringBuffer 差不多相同,它们都继承于AbstactStringBuilder,StringBuilder同样是将新建的对象存放于堆中,也同样能被修改.主要的区别是StringBulider线程不安全,但它的速度快。

尾语

如果上诉有误的话,欢迎提出

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 相关概念 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对...
    东经315度阅读 6,159评论 0 8
  • 【俱舍】柔克 原创 既张我弓,既挟我矢。 “张”字,本义就是安上弓弦或拉紧弓弦。 《说文解字》:“张,施弓弦也。从...
    俱舍阅读 4,743评论 0 1
  • 最近有一个业务上的需求: 每次创建一条记录时需要清理一下redis缓存,于是想到了django的signals,因...
    wu_sphinx阅读 8,616评论 0 1
  • 你敢和你男(女)朋友一起去旅行吗? 1 群聊天栏窗口里,阿峰发来3个V手势胜利表情。 “湖南旅行回来后,终于分了。...
    吃颗糖啦阅读 11,753评论 33 54
  • 最近工作辞了,闲置在家。
    漫漫漫儿阅读 2,498评论 0 3