面试常问: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高。

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值