String StringBuffer StringBuilder
相信很多JAVA初学者和我一样,在日常的学习中,经常碰到String Stringbuffer StringBuilder,但是不清楚它们之间有什么关系,又为什么产生了它们,在这里结合网上的资料以及自己的理解,做一些小小的总结,方便查找
"字符串"可以说在任何编程语言中,都占有一席之地,而对于JAVA来说,为了处理"字符串"相关的问题,就产生了String,StringBuffer,StringBuilder ,接下来,我们分别讲一下它们的使用方法以及之间的区别
* String (字符串常量)
对于String类来讲的话可以说是我们处理字符串最常用的类,下面展示一些关于String类最基础的使用方法:
下面是运行结果:
还有一点对于String类最重要的一点 就是 String类的值不能被修改! 继续看如下图的例子:
从输出结果就可以看出来 原str的值并没有被修改 也就是说str.replace()产生了一个新的对象,name,如果我们需要对字符串需要多次操作呢,比如我们需要给字符串后面不停的加入很多的数据呢? 如果继续使用String类的话,我们每次的操作都会产生一个新的String类的对象,无疑代码将是非常低效的,于是就诞生了StringBuffer以及StringBuilder
* StringBuffer & StringBuilder(字符串变量)
这两个类的诞生可以说都是为了解决上面的问题,对于这两个类的对象进行操作不会产生新的对象,但是它们最大的不同的点就在于线程安全问题。就是说,如果问题的处理不需要关心线程安全问题的话,推荐使用StringBuilder。因为单线程情况下不考虑线程安全的话StringBuilder 相较于 StringBuffer 略有速度优势;然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
做一个小的速度测试就很清楚的看到String和它们两个的差距:
总结:
运行速度:StringBuilder > StringBuffer > String
单线程字符串操作 : StringBuilder
多线程字符串操作 : StringBuffer