黑马程序员技术交流社区

标题: String和StringBuffer的区别是什么? [打印本页]

作者: 你为谁归来    时间: 2014-4-14 17:41
标题: String和StringBuffer的区别是什么?
除了基本上的增删该查,长度,在内存的处理上还有其他的区别吗?希望可以详细点,谢谢!
作者: anqi    时间: 2014-4-14 17:50
本帖最后由 anqi 于 2014-4-14 17:51 编辑

String
你可以认为String是常量。为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承. 对系统的开销极大。只在结果确定或者字符操作很少的时候才实用。
StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();不能通过付值符号对他进行付值. sb = "hello";//错误的
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
中付值的时候可以通过它的append方法.
sb.append("hello");
StringBuffer对系统的开销小,但现在StringBuffer也落伍了,有了新的StringBuilder(线程不安全)更实用。

作者: Sunday    时间: 2014-4-14 18:05
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。
String类型的字符串里面的内容不能修改,如需要修改,编译器会新创建一个字符串对象,有时在编程中并不希望这样,希望能改变字符串对象里的内容,就需要用StringBuffer类,即字符串缓冲区类。
  StringBuffer对象与String对象最大的不同在于StringBuffer不仅能修改字会串的长度,还能修改里面的内容,此外,在多线程编程中,StringBuffer对象较为安全

  StringBuffer类提供了很多对字符串的修改操作,如append() 追加操作.

   append(value);
    //参数value可以是任意基本数据类型以及Object的实例,表示插入的内容。

  1. StringBuffer sb = new StringBuffer();  //sb内容为空
  2.     sb.append(true); //追加布尔数据
  3.     sb.append(1.23); //追加双精度数据
  4.   sb.append('A');  //追加字符串数据
  5.     sb.append("append"); //追加字符串

  6.     //最后得到的sb的内容为"true1.23Aend"
复制代码

       
  StringBuffer sb = new StringBuffer();  //sb内容为空
    sb.append(true); //追加布尔数据
    sb.append(1.23); //追加双精度数据
  sb.append('A');  //追加字符串数据
    sb.append("append"); //追加字符串

    //最后得到的sb的内容为"true1.23Aend"
  


   insert(int offset, value);  //插入操作

  replace(int start, int end, String str);  //替换操作,start 和 end都是整数,分别表示子串在原字符串的起始位置和结束位置(不包括字符串的结束位置)。str是一个字符串对象,表示用于替换的内容。

  delete(int start ,int end);  //删除操作 start 和 end都是整数,分别表示删除的子串在原字符串中的起始位置和结束位置(不包括结束位置的字符)





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2