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 是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 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对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。
(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的容量到真实内容大小;
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
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
相关文章推荐
- string,stringbuffer,stringbuilder的区别
- 34 String、StringBuffer、StringBuilder
- String和StringBuffer,StringBuilder
- StringBuilder 、 StringBuffer 、 String
- Java中String、StringBuffer、StringBuilder的区别介绍
- String、StringBuffer和StringBuilder的比较与总结
- String、StringBuilder、StringBuffer的总结
- String、StringBuilder、StringBuffer 对比
- String,StringBuffer与StringBuilder的区别
- String,StringBuffer,StringBuilder
- Java - String、StringBuilder、StringBuffer
- String,StringBuffer与StringBuilder的区别(运行速度+线程安全)?
- String、StringBuffer与StringBuilder之间区别
- String,StringBuffer与StringBuilder的区别
- String, StringBuilder 与StringBuffer的区别与联系
- String,StringBuffer与StringBuilder的区别??
- Java中的String,StringBuilder,StringBuffer三者的区别
- Java 中的字符串类String、StringBuffer、StringBuilder的区别
- String、StringBuffer与StringBuilder之间区别
- String 、 StringBuilder 、 StringBuffer 的区别