StringBuffer和StringBuilder之间的主要区别是什么?在决定其中任何一项时是否存在性能问题?
当前回答
很好的问题
以下是我注意到的差异:
字符串缓冲区:-
StringBuffer is synchronized
StringBuffer is thread-safe
StringBuffer is slow (try to write a sample program and execute it, it will take more time than StringBuilder)
StringBuilder:-
StringBuilder is not synchronized
StringBuilder is not thread-safe
StringBuilder performance is better than StringBuffer.
常见问题:-
两者都有相同的方法和相同的签名。两者都是可变的。
其他回答
javadoc解释了区别:
此类提供与StringBuffer兼容的API,但不保证同步。该类被设计为在单个线程使用字符串缓冲区的地方(通常情况下)作为StringBuffer的替代品。在可能的情况下,建议优先使用该类而不是StringBuffer,因为在大多数实现中,它会更快。
StringBuffer已同步,StringBuilder未同步。
其他人正确地指出了两者之间的关键区别。然而,在性能方面,我想补充一点,JVM级别的优化“锁定Elision”可以使同步上下文中的性能差异几乎不存在。关于这一点的精彩阅读在这里和这里
字符串缓冲区
同步,因此线程安全线程安全,因此速度较慢
字符串拼接
在Java 5.0中引入异步,因此快速高效用户明确需要同步它,如果他想您可以将其替换为StringBuffer而无需任何其他更改
字符串是不可变的。
StringBuffer是一个可变的和同步的。
StringBuilder也是可变的,但不同步。
推荐文章
- Java 8接口方法中不允许“同步”的原因是什么?
- 如何找到Java堆大小和内存使用(Linux)?
- 使用Enum实现单例(Java)
- RabbitMQ与通道和连接之间的关系
- buildSessionFactory()配置方法在Hibernate中已弃用?
- Spring MVC -如何获得所有的请求参数在一个地图在Spring控制器?
- 如何在Java中按两个字段排序?
- 文件之间的差异。路径中的分隔符和斜杠
- 在方法参数中使用NotNull注释
- Spring MVC中处理可选参数的@RequestParam
- Tomcat:如何查找正在运行的Tomcat版本?
- “java”、“javaw”和“javaws”之间有什么区别?
- 将Date对象转换为日历对象
- 在Java中保存最后N个元素的大小有限的队列
- 如何运行一个类从Jar不是主类在其清单文件