String ,StringBuffer和StringBuilder的区别

String

string 被声明为final类,内部变量亦被final修饰。

string a = "ajfldjfsl";
 System.out.println( a);
 a = "sjfkljsjf";
  System.out.println( a);

对于上述的过程可以有如图表示
图片: 图片: 图片:在这里插入图片描述

(1)string是不可变的,带来的好处主要有两点,第一是线程安全,可以在多个线程中共享而不需要加锁,第二是由于不变性所以它的hashcode可以被缓存后提升效率,这也是为什么我们见到的大多数的HashMap的key都是使用String类型的。

(2)通过双引号定义的字符串我们称为字符串字面量,这部分字符串会被在string pool中创建,在java里面比较一个对象相等,应该优先选择equals方法而不是==方法

(3)对于字符串拼接的 + 号,底层其实是使用StringBuffer 或者 StringBuilder来完成的。

关于StringBuffer,StringBuilder的区别非常简单,大家仅仅需要记住StringBuffer是线程安全和同步的而StringBuilder则不是线程安全和非同步的即可,同时因为StringBuffer是线程线程安全的,所以它的性能低于StringBuilder类的。

那么在日常开发中,应该如何选择一个合适的字符串操作类呢?
(1)如果你要求字符串不可变,那么应该选择String类

(2)如果你需要字符串可变并且是线程安全的,那么你应该选择StringBuffer类

(3)如果你要求字符串可变并且不存在线程安全问题,那么你应该选择StringBuilder类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值