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