String、StringBuffer与StringBuilder之间区别
来源:互联网 发布:女狙击手知乎 编辑:程序博客网 时间:2024/06/05 10:31
工作中很多时候都会用到String,封装类的时候为了方便省劲也是能用String就不用其他的(不建议这样做),关于字符串的操作有String,StringBuffer,StringBuilder三种形式,今天整理一下梳理一下记忆。
关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下
1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String
2.String <(StringBuffer,StringBuilder)的原因
String:字符串常量(不可变)
StringBuffer:字符创变量
StringBuilder:字符创变量
3.Stirng具体慢的原因,String在设计的时候基于安全和性能的原因设置为final不可变,我们代码中对字符串的操作,实际上是重新new一个String对象返回,原来的对象没有引用会GC自动回收(JVM对String操作有优化,很多时候性能影响不明显),StringBuffer和StringBuilder是可变的,操作时不需要重新new对象,因此会比较快,而StringBuffer因为是线程安全,所以会相对比StringBuilder慢一点。
对于三者使用的总结:
1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder(线程非安全)
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer(有buff就是安全,这个是线程安全的)
之前在做文件上传的时候,拼接字符串用String操作,发现特别的慢,改成StringBuilder效果立竿见影,还是应该按照实际情况使用,不能逮着String使劲用。
字符串连接误用
错误的写法:很多时候这种错误的写法就是我的方式
String s = ""; for (Person p : persons) { s += ", " + p.getName(); } s = s.substring(2); //remove first comma
正确的写法:
StringBuilder sb = new StringBuilder(persons.size() * 16); // well estimated bufferfor (Person p : persons) { if (sb.length() > 0) sb.append(", "); sb.append(p.getName);}
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- String 、StringBuffer、与StringBuilder之间的区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- Java--String、StringBuffer与StringBuilder之间区别
- LabVIEW自带函数实现SQL Server操作(下)
- linux安装mysql数据库
- 关于 Android studio的Gradle 那些坑
- MySQL优化实例
- MyBatis 原理浅析 3——数据操作
- String、StringBuffer与StringBuilder之间区别
- 凸优化学习笔记(三)之凸集基本概念
- WSN之串口
- iOS 安卓 服务器后台 公用的简单加密和解密
- MovieLens 《用Python进行数据分析》
- 【JavaWeb-30】SpringMVC原理、入门程序、参数传递
- 自定义VideoView实现视频画面的缩放
- 'getDrawable(int)' is deprecated,getDrawable过时
- git上传代码至github