黑马程序员技术交流社区
标题:
String和StringBuffer的区别
[打印本页]
作者:
月时微
时间:
2013-6-19 12:45
标题:
String和StringBuffer的区别
本帖最后由 Super_Class 于 2013-6-19 19:34 编辑
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当知道字符数据要改变的时候你就可以使用StringBuffer。典型地,可以使用StringBuffers来动态构造字符数据。
StringBuffers的用法?优点在什么地方?
作者:
vicoooo
时间:
2013-6-19 12:59
String 对一串字符进行操作。不可变类。
StringBuffer 也是对一串字符进行操作,但是可变类。
String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
note:不能通过付值符号对他进行付值.
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
中付值的时候可以通过它的append方法.
sb.append("hello");
字符串连接操作中StringBuffer的效率要比String高
作者:
沐有鱼丸
时间:
2013-6-19 14:54
测试如下:
public class StringAndStringBuffer {
public static void main(String[] args) {
String str = "String";
StringBuffer sf = new StringBuffer("StringBuffer");
System.out.println("String ...." + add1(str));
System.out.println("StringBuffer...." +add2(sf));
//String 覆写了equals()和hashCode()
System.out.println(new String("abc").equals(new String("abc")));
//StringBuffer没有覆写equals()和hashCode()
System.out.println(new StringBuffer("abc").equals(new StringBuffer("abc")));
}
public static String add1(String str) {
for(int i=0; i<10; i++){
str = str +" "+ i;
}
return str;
}
public static StringBuffer add2(StringBuffer sf) {
for(int i=0; i<10; i++) {
sf.append(" " + i);
}
return sf;
}
}
输出结果:
String ....String 0 1 2 3 4 5 6 7 8 9
StringBuffer....StringBuffer 0 1 2 3 4 5 6 7 8 9
true
false
String 被定义为不可变类型,即每次引用一个新的字符串都会开辟一个新的内存空间,如果操作的数据经常变动,每次变动都会申请一个新的内存空间,效率低而且占用系统资源。
StringBuffer 提供字符串修改,每次改动都是在原有的字符上追加,而不会去重新开辟新的内存空间,这样就节省了系统资源,提高了效率。
另外String类覆写了equals()和hashCode()方法,StringBuffer则没有,所以将StringBuffer存入java集合类中时可能会出现错误。
作者:
zhengweicong
时间:
2013-6-19 16:26
http://blog.csdn.net/yirentianran/article/details/2871417
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2