面试常问:String、StringBuffer和StringBuilder的区别及联系

在平常开发工作中,经常会用到字符串,常用的有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高。

知识就是要不断的学习,不断的复习,才会记忆的更加的深刻。加油,美好的风景一直在路上!

猜你喜欢

转载自blog.csdn.net/qq_36833673/article/details/106869867