String、StringBuffer、StringBuilder的区别
来源:互联网 发布:千牛首页的店铺数据 编辑:程序博客网 时间:2024/05/29 18:10
字符串是java开发过程中最常用的。总结一下大概的区别。具体如下:
1、变与不变
String字符串一旦定义 则其中对象不可改变,具体原因可以查看JDK源码 因为有“final”修饰符,所以可以知道string对象是不可变的。private final char value[];
StringBuffer和StringBuilder都是继承自AbstractStringBuilder 而父类中是也是用数组定义但是可以改变的char value[];
2、连接字符串的效率
① 一般的情况下 StringBuilder > StringBuffer > String 。多用StringBuilder拼接字符串,具体原因:
String 使用“+”链接(不推荐),具体原因:每次进行拼接都会创建新的对象,而不是改变原来的对象;
StringBuilder和StringBuffer都是封装了append(); 而StringBuffer加了同步锁的 是线程安全的 所以处理起来比StringBuilder慢
② 特殊情况 小数据量处理
String str = "a"+"b"+"c";
StringBuffer sbf = new StringBuffer();
sbf.append("a").append("b").append("c")
这时String要比StringBuffer快的多。String 对象的字符串拼接其实是被 JVM 解释成了StringBuffer 对象的拼接,
String拼接的字符串来自同一对象 所以这些时候String 对象的速度并不会比StringBuffer 对象慢。
推荐 在单线程中操作大量数据的字符串时,使用StringBuilder;在多线程中操作大量数据的字符串时,使用StringBuffer。
3、在线程安全方面不同
StringBuffer 字符串变量(线程安全),具体原因 查看jdk源码可知StringBuffer给有关操作方法加了锁 查看jdk源码可知
如:expandCapacity、append、insert、indexOf,setCharAt等公共方法
StringBuilder 字符串变量(非线程安全) 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的区别
- String StringBuffer StringBuilder的区别
- String,StringBuffer,StringBuilder的区别?
- 自定义浏览器滚动条样式
- spring Boot 生成图片验证码 存入redis
- 在activity类中更新widget
- 聊一聊PCB规划、布局和布线方面的设计技巧
- Android 线程通信(Handler + Message + Looper) 2
- String、StringBuffer、StringBuilder的区别
- Android项目The type R is already defined
- Seafile与花生壳实现网络网盘-yellowcong
- FPGA之有限状态机
- HandlerThread 源码解析
- 高级命令行文本处理cut,sed,awk
- Parted分区
- JS插件(1)--- autocomplete 异步加载下拉数据
- Codeforces Round #442(Div.2) B.Nikita and string(线性DP)