博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
String,StringBuffer,StringBuilder三者的区别
阅读量:6086 次
发布时间:2019-06-20

本文共 884 字,大约阅读时间需要 2 分钟。

String,StringBuffer,StringBuilder三者的区别

1、 String

String为标准的字符串常量,String对象底层为char类型数组,且对象一经创建就不能更改,由final修饰,如图:

 

 

String做字符串拼接的时候效率很低,例如:

String str = "ab";

str = str + "cd";

速度慢的原因:

对于这段代码,JVM的处理方式是 第一行代码创建了名为str的String对象,并赋值为“ab”,第二行代码JVM再次创建了一个名为str的新对象,并把原来的str和"cd"加起来赋值给他,然后JVM会GC掉第一个str对象,所以String对象做字符串拼接,实际上是一个不断创建并回收对象的过程,非常影响速度性能。

 

2、 StringBuilder

StringBuilder 继承自 AbstractStringBuilder,相当于在String 类的基础上新增封装了很多针对字符串值操作的方法,并且,底层的char类型数组不再声明为final类型,如图:

 

                                 底层数据结构未用final修饰

 

 

3、 StringBuffer

StringBuffer同样继承自 继承自 AbstractStringBuilder,结构与StringBuilder相似,不同的是在针对字符串操作并且需要线程安全的方法都以Synchronizated修饰

所以他是线程安全的,但他也因此比StringBuilder速度慢。如图:

                    synchronized修饰 线程安全

 

正常情况下字符串操作的速度是StringBuilder > StringBuffer > String

所以建议:

1、在字符串操作较少是,使用String

2、线程安全的情况下,使用StringBuilder,速度较快

3、非线程安全的情况下,使用StringBuffer

 

转载于:https://www.cnblogs.com/msqz/p/8436147.html

你可能感兴趣的文章
批量文件重命名工具
查看>>
简单说一下UWP中的JumpList
查看>>
unity将object[]或者string对象转换成枚举enum
查看>>
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.19. 范围函数和操作符...
查看>>
以太坊系列之六: p2p模块--以太坊源码学习
查看>>
使用scikit-learn解决文本多分类问题(附python演练)
查看>>
2018 年最值得关注的 JavaScript 趋势
查看>>
什么是区块链?超级账本 Brian Behlendorf 从五个方面教你认识
查看>>
Linux中的帮助功能
查看>>
针对Android的Pegasus恶意软件版本和针对iOS的有什么不同?
查看>>
全局探色器
查看>>
Hive Export和Import介绍及操作示例
查看>>
http://mongoexplorer.com/ 一个不错的 mongodb 客户端工具。。。
查看>>
Xcode 4.3 使用xcodebuild命令编译项目环境设置
查看>>
上传jar包到nexus私服
查看>>
Why Namespace? - 每天5分钟玩转 OpenStack(102)
查看>>
Project:如何分析项目中的资源分配情况
查看>>
HDU 4803 Poor Warehouse Keeper (贪心+避开精度)
查看>>
小错误汇总
查看>>
AVX2整数向量运算
查看>>