在平常开发工作中,经常会用到字符串,常用的有String、StringBuffer、StringBuilder,那么既然这三种都是字符串,那么它们有什么区别及联系呢?
1:String:
我们经常说String是不可变的,那么为什么它是不可变的呢?我们看下它的源码:
public final class String
我们可以看到String类上面有final关键字修饰,所以String类是不可变的,对象一旦创建,其中包含的内容不可更改。所以,平常开发工作中,需要一个字符串内容不变的对象时,用作跟其他变量比较,条件判断时可以使用。
2:StringBuffer:
StringBuffer是可变的字符串对象,我们创建一个对象后,我们可以通过其append()、reverse()等方法对其进行操作。我们常说StringBuffer是线程安全的,那么为什么它是线程安全的呢,我们看下它的源码:
@Override
public synchronized int length() {
return count;
}
@Override
public synchronized int capacity() {
return value.length;
}
因为StringBuffer的方法有synchronized修饰,给方法加锁了,所以说是线程安全的。
3:StringBuilder:
StringBuilder也是字符串内容可变的对象,跟StringBuffer都是字符串内容可变的对象,两者的用法基本相同,不过StringBuilder是非线程安全的,所以StringBuilder的效率要比StringBuffer高。
总结:String是字符串内容不可变的,StringBuffer和StringBuilder是字符串内容可变的,StringBuffer是线程安全的,StringBuilder是非线程安全的,StringBuilder效率比StringBuffer高。
知识就是要不断的学习,不断的复习,才会记忆的更加的深刻。加油,美好的风景一直在路上!