String StringBuffer StringBuilder 老生常谈
1.String 与 StringBuffer 、 StringBuilder的区别
- String 字符串常量 而 (StringBuffer 和 StringBuilder 字符串变量)
- 执行速度上:StringBuilder > StringBuffer > String
String是字符串常量,java的字符串不变性,每当用String操作字符串时,实际上实在不断创建新的字符串对象,老的字符串对象经过GC(垃圾回收操作)回收,而使用StringBuilder和StringBuffer操作字符串实际上是在一个字符串对象上操作的,所以StringBuffer和StringBuilder在速度上是快于String的。
2.StringBuffer 和 StringBuilder的区别
- StringBuilder是线程非安全的,StringBuffer是线程安全的,String是字符串常量(是不变的)显然是线程安全的。
- StringBuilder 和 StringBuffer 都继承了AbstractStringBuilder类
//StringBuffer类中的一些方法的实现,可以看到这些方法都是加了同步锁的,所以StringBuffer是线程安全的
public StringBuffer(CharSequence seq) {
this(seq.length() + 16);
append(seq);
} @Override
public synchronized int length() {
return count;
} @Override
public synchronized int capacity() {
return value.length;
} @Override
public synchronized void ensureCapacity(int minimumCapacity) {
super.ensureCapacity(minimumCapacity);
} /**
* @since 1.5
*/
@Override
public synchronized void trimToSize() {
super.trimToSize();
} /**
* @throws IndexOutOfBoundsException {@inheritDoc}
* @see #length()
*/
@Override
public synchronized void setLength(int newLength) {
toStringCache = null;
super.setLength(newLength);
}
//StringBuilder类的一些方法的实现,大多直接调用AbstractStringBuilder父类的方法,并没有加同步锁,因此StringBuilder类是非线程安全的
@Override
public StringBuilder append(long lng) {
super.append(lng);
return this;
}
@Override
public StringBuilder delete(int start, int end) {
super.delete(start, end);
return this;
} /**
* @throws StringIndexOutOfBoundsException {@inheritDoc}
*/
@Override
public StringBuilder deleteCharAt(int index) {
super.deleteCharAt(index);
return this;
} /**
* @throws StringIndexOutOfBoundsException {@inheritDoc}
*/
@Override
public StringBuilder replace(int start, int end, String str) {
super.replace(start, end, str);
return this;
} /**
* @throws StringIndexOutOfBoundsException {@inheritDoc}
*/
@Override
public StringBuilder insert(int index, char[] str, int offset,
int len)
{
super.insert(index, str, offset, len);
return this;
}
3.三者的使用总结
- 如果要操作少量的数据用 = String
- 单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
- 多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
4.提一下抽象类和接口
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
可以看到 StringBuffer继承了抽象类AbstractStringBuilder,并且继承了Serializable和CharSequence接口,那么抽象类和接口的区别是什么?
抽象类可以定义一些子类的公用方法,子类继承了抽象父类后只需要增加新的功能,不需要重写抽象父类中已经存在的方法。super( parameter)(构造函数)、super.function(parameter) (成员函数)
父类接口中只是定义了方法的声明,和常量的定义,子类继承了接口后,需要重写方法。
String StringBuffer StringBuilder 老生常谈的更多相关文章
- java中 String StringBuffer StringBuilder的区别
* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
- String,StringBuffer,StringBuilder的区别
public static void main(String[] args) { String str = new String("hello...."); StringBuffe ...
- 关于String StringBuffer StringBuilder
0. String对象的创建 1.关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:String s=new String("Hello world&qu ...
- [置顶] String StringBuffer StringBuilder的区别剖析
这是一道很常见的面试题目,至少我遇到过String/StringBuffer/StringBuilder的区别:String是不可变的对象(final)类型,每一次对String对象的更改均是生成一个 ...
- Java学习笔记--String StringBuffer StringBuilder
String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cn ...
- String StringBuffer StringBuilder (转)
转自:http://www.iteye.com/topic/522167 众所周知,String是由字符组成的串,在程序中使用频率很高.Java中的String是一个类,而并非基本数据类型. 不过她却 ...
- 【Java基础】String StringBuffer StringBuilder
String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...
- String,StringBuffer,StringBuilder的区别及其源码分析
String,StringBuffer,StringBuilder的区别这个问题几乎是面试必问的题,这里做了一些总结: 1.先来分析一下这三个类之间的关系 乍一看它们都是用于处理字符串的java类,而 ...
- final,finally,finalize有什么区别?String, StringBuffer, StringBuilder有什么区别?Exception和Error有什么区别?
继上篇JVM学习之后,后面将分三期深入介绍剩余JAVA基础面试题,每期3题. 题目一.final,finally,finalize有什么区别? /*请尊重作者劳动成果,转载请标明原文链接:*/ /* ...
随机推荐
- poj1703 Find them, Catch them(并查集的应用)
Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 32225 Accepte ...
- QT .pro文件 LIBS用法详解
在程序中需要使用到团队其它成员开发的静态库和动态库,起初是知道使用LIBS变量在在.pro文件中指定需要包含的库,但是实际使用的时候却遇到很大麻烦,但其实确实是因为自己看官方文档不太用心造成的. 下面 ...
- centos单机安装Hadoop2.6
一,安装环境 硬件:虚拟机 操作系统:Centos 6.4 64位 IP:10.51.121.10 主机名:datanode-4 安装用户:root 二,安装JDK 安装JDK1.6或者以上版本.这里 ...
- 数据库设计(七)第三范式(3NF)
In our last tutorial, we learned about the second normal form and even normalized our Score table in ...
- 我不会OOO,仍然可以XXX_转
转自:http://blog.csdn.net/absurd 按照<审死官>里的读法,标题可以读着:答复:我不会圈圈圈,仍然可以叉叉叉.圈圈叉叉并不特指某个东西,而是一个通配符.代表诸如: ...
- yii save model return id null
/** * Creates a new model. * If creation is successful, the browser will be redirected to the 'view' ...
- markdown完整语法规范3.0+编辑工具介绍
以下每一种,我都会挑选最常用的一种写法,一切表述只追求简明扼要.想深究,请查看文末链接. 通用写法:符号+空格+内容 1 引用: 单层引用: > 一级引用 多层引用:内层符号前的空格必须要 &g ...
- CocosCreate 与 Netty 开发斗地主 (一步一步开发)
CocosCreate 与 Netty 开发斗地主 开发此教程的目的是为了教会大家基本的使用Netty,通过一个小例子来教会大家制作斗地主游戏服务器,采用WebSocket方式! 目前正在制作阶段, ...
- 路由器port触发与转发---Port Forwarding & Port Triggering
What is Port Triggering? If you have not read my explanation of port forwarding do so now. You can f ...
- HTML DOM和BOM常用操作总结
JavaScript Code 1234567891011121314151617181920212223242526272829303132333435363738394041424344454 ...