首页 > 其他分享 >StringBuffer 和 StringBuilder的区别

StringBuffer 和 StringBuilder的区别

时间:2023-05-24 09:45:07浏览次数:25  
标签:区别 StringBuffer API 线程 StringBuilder 字符串 append

1、线程安全性:

StringBuffer 是线程安全的,而 StringBuilder 不是。

如果在多线程环境下使用 StringBuilder,可能会发生竞态条件等并发问题。

 

StringBuffer 和 StringBuilder 都继承于 AbstractStringBuilder类:

字符串的append方法调用的是AbstractStringBuillder的append方法,逻辑:

1 ) 获得需要添加的字符串的length

2 ) 判断是否能够放下新添加的字符串并进行扩充

3 ) 修改value 数组 和 字符串的长度

当用两个线程同时去填下相同长度的字符串的时候,在进行容量判断的时候,每个线程都会的到相同地结果,将字符串扩充到相应的数值,但这个数值可能只可以放得下一个线程的字符串却放不下两个的,因此就会出现 数组越界的异常而同时,扩充后的字符串的长度也会不正常。

然而StringBuffer却不会出现这个问题,因为其给append方法添加了锁,实现了线程同步。

 

2、性能:

由于 StringBuffer 保证了线程安全性,它的性能通常比 StringBuilder 差。

在单线程环境下,StringBuilder 的速度会比 StringBuffer 更快。

 

3、用途:

如果你需要在多线程环境下操作字符串,那么应该使用 StringBuffer。

如果你使用的是单个线程,并且目标是快速构建字符串,则可以使用 StringBuilder。

 

4、API:

StringBuffer 和 StringBuilder 大部分 API 是一样的。

StringBuffer 提供了一些额外的 API,如 length()、capacity() 和 ensureCapacity()。

 

 

 

在处理数据敏感的场合,如密码、个人信息等,建议使用 StringBuffer,而日志打印等场合则可以使用 StringBuilder。

标签:区别,StringBuffer,API,线程,StringBuilder,字符串,append
From: https://www.cnblogs.com/shirleyxueli/p/17427116.html

相关文章

  • spring中@Autowired和@Resource的区别
    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。1、共同点两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。2、不同点(1)@Autowire......
  • [Java]instanceof和getClass()的区别
    getClass()willbeusefulwhenyouwanttomakesureyourinstanceisNOTasubclassoftheclassyouarecomparingwith. classA{}classBextendsA{}Objecto1=newA();Objecto2=newB();o1instanceofA=>trueo1instanceofB=>false......
  • Pytorch tensorboard与tensorboardX的区别
    tensorboardX跟tensorboard在使用上是基本一样的,区别可能仅在于一个是大佬开发的,一个是PyTorch官方与TensoBoard合作的。tensorboardX已经被deprecated了,并且不再维护了,用fromtorch.utils.tensorboardimportSummaryWriter原文链接:https://blog.csdn.net/hxxjxw/article/d......
  • org.springframework.data.annotation.Transient 和 javax.persistence.Transient 的
    1、org.springframework.data.annotation.Transient 和 javax.persistence.Transient 都是用于标记一个属性不需要被持久化到数据库中的注解。它们的区别在于它们所处的框架和使用场景。org.springframework.data.annotation.Transient 是SpringDataJPA框架提供的注解,用......
  • Python语言中__init__与__new__的区别是什么?
    __new__和__init__二者都是Python面向对象语言中的函数,其中__new__比较少用,__init__相对常用,那么两者有什么区别呢?以下是详细的内容:__new__作用:创建对象,并分配内存__init__作用:初始化对象的值注意:1、与java相比,java只有一个构造器。而python__new__方法与__in......
  • DP VGA HDMI VGA区别和相互转换
    HDMI、DP、DVI、VGA哪个更好?别因为几块钱白白浪费显示器性能-知乎(zhihu.com)显示器视频接口科普:HDMI、DP、DVI、VGA有哪些区别(zhihu.com)VGA转其它类型需要供电信号一般DP转换HDMI效果或更好,属于向下兼容,而HDMI转换DP属于向上兼容有些需要USB供电DVI与HDMI协议相同,不需......
  • 光猫和路由器的区别是什么
    光猫和路由器的区别,只用其中一个可以吗?没想到有很多小伙伴都不知道光猫和路由器的区别,这两者虽然长得很像,但是功能却截然不同,今天小亿就带大家了解一下二者的区别。光猫和路由器的区别主要有以下三方面。1、光猫和路由器的作用不同光猫主要是把光纤里的光信号转换成上网的网络......
  • linux 一块空磁盘初始化为dos的磁盘分区表,然后可以直接初始化整个磁盘为ext4格式,也可
    问:linux一块空磁盘初始化为dos的磁盘分区表,然后可以直接初始化整个磁盘为ext4格式,也可以先把磁盘分出一个Partition再初始化为ext4格式,这两种方式有什么区别,有什么特点答:在Linux上,对一块空磁盘进行初始化为ext4文件系统时,你可以选择两种不同的方式:直接初始化整个磁盘为......
  • 关于AI与api-Java接口的区别应用点
    AI和API是目前互联网技术中的两个趋势,它们在许多领域都发挥了重要作用。在技术的领域中,AI代表的是人工智能,而API代表的是应用程序接口。在本文中,将讨论AI和API的详细分析。AI是人工智能的简称,是指通过计算机技术模拟人类智能的一种技术体系。AI可以学习数据并自我改进,以达到更好的......
  • Java中的普通类和抽象类有什么区别?
    1.实例化对象:普通类可以被实例化,而抽象类不能被直接实例化。2.成员:普通类中可以有成员变量、成员方法和构造方法,而抽象类中也可以有这些成员,但是抽象类中还可以有抽象方法。3.抽象方法:抽象类中有抽象方法,这些方法没有实现体,需要在子类中被实现和重写。而普通类中没有抽象方法......