您的位置:首页 > 产品设计 > UI/UE

String与StringBuffer、StringBuilder

2017-03-14 11:35 169 查看
文章参考了以下内容

http://www.jianshu.com/p/a93ceba93c2e

http://www.cnblogs.com/liu-chao-feng/p/5636063.html

区别:

String:

是对象不是原始类型.

为不可变对象,一旦被创建,就不能修改它的值.

对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.

String 是final类,即不能被继承.

StringBuffer:

是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象,而是修改自身。

它只能通过构造函数来建立,

StringBuffer sb = new StringBuffer();

注意:不能通过赋值符号对他进行赋值.

sb = “welcome to here!”;//error

对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer中赋值的时候可以通过它的append方法.

sb.append(“hello”);

StringBuilder

与StringBuffer类似,但不是线程安全的(与StringBuffer的主要区别)。

效率:StringBuilder>StringBuffer>String

在线程中,StringBuffer相对与String,StringBuilder更加线程安全。

单线程程序的话,用StringBuilder,效率更高;如果涉及到多线程的,那只能是StringBuffer。

线程原因,StringBuilder可以操作StringBuffer,但是StringBuffer不可以操作StringBuilder。

StringBuffer的常用方法

对象初始化:

StringBuffer对象的初始化(一般使用构造方法进行初始化。)

例如:创建带有内容的StringBuffer对象

StringBuffer s = new StringBuffer(“abc”);

**

append方法

public StringBuffer append(boolean b)

该方法的作用是追加内容到当前StringBuffer对象的末尾,类似于字符串的连接。调用该方法以后,StringBuffer对象的内容也发生改变,例如:

StringBuffer sb = new StringBuffer(“abc”);

sb.append(true);

则对象sb的值将变成”abctrue”。

deleteCharAt方法

public StringBuffer deleteCharAt(int index)

该方法的作用是删除指定位置的字符,然后将剩余的内容形成新的字符串。例如:

StringBuffer sb = new StringBuffer(“Test”);

sb. deleteCharAt(1);

该代码的作用删除字符串对象sb中索引值为1的字符,也就是删除第二个字符,剩余的内容组成一个新的字符串。所以对象sb的值变为”Tst”。

还存在一个功能类似的delete方法:

public StringBuffer delete(int start,int end)

该方法的作用是删除指定区间以内的所有字符,包含start,不包含end索引值 的区间。例如:

StringBuffer sb = new StringBuffer(“TestString”);

sb. delete (1,4);

该代码的作用是删除索引值1(包括)到索引值4(不包括)之间的所有字符,剩余的字符形成新的字符串。则对象sb的值是”TString”。

insert方法

public StringBuffer insert(int offset, boolean b)

该方法的作用是在StringBuffer对象中插入内容,然后形成新的字符串。例如:

StringBuffer sb = new StringBuffer(“TestString”);

sb.insert(4,false);

该示例代码的作用是在对象sb的索引值4的位置插入false值,形成新的字符串,则执行以后对象sb的值是”TestfalseString”。

reverse方法

public StringBuffer reverse()

该方法的作用是将StringBuffer对象中的内容反转,然后形成新的字符串。例如:

StringBuffer sb = new StringBuffer(“abc”);

sb.reverse();

经过反转以后,对象sb中的内容将变为”cba”。

setCharAt方法

public void setCharAt(int index, char ch)

该方法的作用是修改对象中索引值为index位置的字符为新的字符ch。例如:

StringBuffer sb = new StringBuffer(“abc”);

sb.setCharAt(1,’D’);

则对象sb的值将变成”aDc”。

trimToSize方法

public void trimToSize()

该方法的作用是将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。

StringBuilder常用方法

StringBuilder的常用方法和StringBuffer的一样。列出如下:

(1)构造函数

StringBuilder有四个构造函数:

StringBuilder() value内容为空,并设置容量为16个字节;

StringBuilder(CharSequece seq) 使用seq初始化,容量在此基础上加16;

StringBuilder(int capacity) 设置特定容量;

StringBuilder(String str) 使用str初始化,容量str大小的基础上加16;

(2)append方法

由于继承了Appendable接口,所以要实现append方法,StringBuilder类对几乎所有的基本类型都重载
9ece
了append方法:

append(boolean b)

append(char c)

append(char[] str)

append(char[] str,int offset,int len)

append(CharSequence s)

append(CharSequence s,int start,int end)

append(double d)

append(float f)

append(int i)

append(long lng)

append(Object obj)

append(String str)

append(StringBuffer sb)

(3)insert方法

insert方法可以控制插入的起始位置,也几乎对所有的基本类型都重载了insert方法:

insert(int offser,boolean b)

insert(int offset,char c)

insert(int offset,char[] str)

insert(int index,char[] str,int offset,int len)

insert(int dsfOffset,CharSequence s)

insert(int dsfOffset,CharSequence s,int start,int end)

insert(int offset,double d)

insert(int offset,float f)

insert(int offset,int i)

insert(int offset,long l)

insert(int offset,Object obj)

insert(int offset,String str)

(4)其它会改变内容的方法

上面的那些方法会增加StringBuilder的内容,还有一些方法可以改变StringBuilder的内容:

StringBuilder delete(int start,int end) 删除从start到end(不包含)之间的内容;

StringBuilder deleteCharAt(int index) 删除index位置的字符;

StringBuilder replace(int start,int end,String str) 用str中的字符替换value中从start到end位置的子序列;

StringBuilder reverse() 反转;

void setCharAt(int index,char ch) 使用ch替换位置index处的字符;

void setLength(int newLength) 可能会改变内容(添加’\0’);

(5)其它常用方法

下面这些方法不会改变内容:

int capacity() 返回value的大小即容量;

int length() 返回内容的大小,即count;

char charAt(int index) 返回位置index处的字符;

void ensureCapacity(int minimumCapacity) 确保容量至少是minimumCapacity;

void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin) 返回srcBegin到srcEnd的字符到dst;

int indexOf(String str) 返回str第一次出现的位置;

int indexOf(String str,int fromIndex) 返回从fromIndex开始str第一次出现的位置;

int lastIndexOf(String str) 返回str最后出现的位置;

int lastIndexOf(String str,int fromIndex) 返回从fromIndex开始最后一次出现str的位置;

CharSequence subSequence(int start,int end) 返回字符子序列;

String substring(int start) 返回子串;

String substring(int start,int end) 返回子串;

String toString() 返回value形成的字符串;

void trimToSize() 缩小value的容量到真实内容大小;

String与StringBuffer之间的转化

**

StringBuffer和String属于不同的类型,不能直接进行强制类型转换。

StringBuffer对象和String对象之间的互转的代码如下:

String s = “abc”;

StringBuffer sb1 = new StringBuffer(“123”);

StringBuffer sb2 = new StringBuffer(s); //String转换为StringBuffer

String s1 = sb1.toString(); //StringBuffer转换为String
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: