Java基础——java中String、StringBuffer、StringBuilder的区别
(转自:http://www.cnblogs.com/xudong-bupt/p/3961159.html)
java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题。现在总结一下,看看他们的不同与相同。
1.可变与不可变
String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。
private final char value[];
StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。
char[] value;
2.是否多线程安全
String中的对象是不可变的,也就可以理解为常量,显然线程安全。
AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。
StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。看如下源码:
public synchronized StringBuffer reverse() {
super.reverse();
return this;
} public int indexOf(String str) {
return indexOf(str, 0); //存在 public synchronized int indexOf(String str, int fromIndex) 方法
}
StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。
3.StringBuilder与StringBuffer共同点
StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。
抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。
StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer会在方法上加synchronized关键字,进行同步。
最后,如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。
最新文章
- 一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之 Http 请求客户端
- runtime的黑魔法
- Java 之 多线程编程
- Markdown语法速查
- [ML] Naive Bayes for email classification
- [Spring] spring-session + JedisPool 实现 session 共享
- 第九章 C语言在嵌入式中的应用
- Highcharts-3.0.6
- QEvent大全,有中文解释
- C Socket Programming for Linux with a Server and Client Example Code
- Android bluetooth介绍(四): a2dp connect流程分析
- 【转】聊聊HTTPS和SSL/TLS协议
- JavaScript设计模式_02_策略模式
- 解决外部编辑器修改Eclipse文件延迟刷新【补充】
- Python数据分析工具
- dmraid 用法
- python学习笔记之自定义函数的导入
- 不平衡学习 Learning from Imbalanced Data
- centos 打包报错License for package Android SDK Build-Tools 25.0.3 not accepted
- ETL化的IOTA架构
热门文章
- Linux删除文件后空间不释放
- leetcode 889. Spiral Matrix III
- castle windsor学习-----Registering components by conventions
- 测试CPU核心个数
- List 中去除 null 方法讨论
- kaggle 欺诈信用卡预测——不平衡训练样本的处理方法 综合结论就是:随机森林+过采样(直接复制或者smote后,黑白比例1:3 or 1:1)效果比较好!记得在smote前一定要先做标准化!!!其实随机森林对特征是否标准化无感,但是svm和LR就非常非常关键了
- Linux学习过程中的简单命令
- hadoop_学习_01_入门准备
- python实现列队
- mci播放mp3