Java中String、StringBuilder和StringBuffer的区别

在网上查找知识点时很容易产生当时看了就会,下次又遇到这个知识点时却不得不再次上网查看这个知识点的毛病。于是打算以后将自己领悟不清的知识点写下来(相信这也是大多数人喜欢写博客的原因吧),一方面为了给后来者借鉴,另一方面也是为了自己加深印象和自己对知识的总结。

今天就来谈谈自己对java中String、StringBuilder和StringBuffer知识点的理解。

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

String

所谓常量,即该对象的值已经被赋予了,不能再更改。若非要更改,则只能再重新创建另一个对象,在这个新创建的对象上再进行赋值。因此,每次在对String类型的对象进行改变的时候其实都等同于生成了一个新的String对象,然后将指针指向新的String对象,所以经常改变内容的字符串最好不要用String,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,JVM的GC就会开始工作,那速度是一定会相当慢的。

StringBuffer

所谓变量,即是可以随时变化的量。如果对StringBuffer对象进行改变,每次结果都会对StringBuffer对象进行操作,而不是生成新的对象。所以一般字符串要经常变化的话我推荐使用StringBuffer。

StringBuilder

StringBuilder和StringBuffer类功能基本相似,方法也差不多,主要区别在于StringBuffer类的方法是多线程安全的,而StringBuilder不是线程安全的,相比而言StringBuilder类会略微快一点。

题外话:现在很多互联网公司面试java的面试官都喜欢问这样一个问题,

请你谈谈StringBuffer和StringBuilder的区别。

大多数人肯定会直接说前者是线程安全的而后者是非线程安全的。其实这个时候才是面试官真正想问的,他会顺着你的回答又问你,那请你谈谈什么是线程…balabalabala。哈哈,要想顺利通过面试,所以对知识的了解还是全面点吧~!

2018.3.19更

欢迎加入我的Java交流1群:659957958。

2018.4.21更:如果群1已满或者无法加入,请加Java学习交流2群:305335626


联系

If you have some questions after you see this article,you can tell your doubts in the comments area or you can find some info by clicking these links.

坚持原创技术分享,您的支持将鼓励我继续创作!