黑马程序员技术交流社区

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

作者: 张明星    时间: 2012-3-26 00:38
标题: String 和StringBuffer的区别?
他们都可以用来存储字符串,有什么区别呢
作者: djx900    时间: 2012-3-26 00:47
STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
使用 StringBuffer 主要就是在性能上的考虑。 String 是一种非常常用的数据类型,但由于 String 是不可变对象,在进行 String 的相关操作的时候会产生许多临时的 String 对象。而 StringBuffer 在操作上是在一个缓冲中进行的,性能当然优越得多。不过,一般做为简单的字符串传递和其它操作,只不要改变字符串内容的操作,用 String 效率会高一些
作者: 乔玉吉    时间: 2012-3-26 00:55
他们都可以用来存储字符串的容器,
String的长度是不可变的,StringBuffer长度是可变的
StringBuffer具备可以直接对原串添加append , 插入insert 方法和删除delete等操作,
还具备替换replace,翻转reverse ,获取字串sbustring等功能.

StringBuffer是执行同步的,如果想要速度更快,可以用不同步的StringBuilder,他同样具备了StringBuffer的所有功能.
作者: 亚男    时间: 2012-3-26 01:01
String是定常字符串,是个字符串常量,StringBuffer是字符缓冲区类,是变长字符串,
作者: 冯建鹏    时间: 2012-3-26 01:53
1. 概述:
         1.1 String

                  字符串常量,但是它具有不可变性,就是一旦创建,对它进行的任何修改操作都会创建一个新的字符串对象。

        1.2 StringBuffer

                  字符串可变量,是线程安全的,和StringBuilder类提供的方法完全相同。如果查看java的源代码(即java安装目录的src.zip文件),就会发现它和StringBuilder类的方法的区别就是,在每个方法前面添加了"synchronized",保证其是线程安全的。

2. 主要方法:
         java API提供了处理字符串的绝大多数方法,所以我们在写程序的时候如果需要处理字符串,一定要先查找API,查查是不是已经提供了相应的方法。个人认为这是考察一个程序员是否合格的一个初级标准。

        2.1 String

                  检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写等等。
2.2 StringBuffer

                  与String类提供的方法大同小异,有些只是名称的小小区别。由于StringBuffer类主要用来处理经常变动的字符串,所以用的最多的方法是append、insert和delete方法,java API 已经重载append和insert方法,从而支持对几乎所有基本数据类型的操作。方法详细介绍参见java API。

选择方法:
              如果很少修改,使用String,毕竟它最简单;
              如果经常修改,且是单线程,使用StringBuilder;(实际上,StringBuilder是我们最常用的,因为我们经常需要修改字符串,并且我们的程序多是单线程的)
              如果经常修改,且是多线程,使用StringBuffer。
作者: 杨波    时间: 2012-3-26 07:15
String 不是简单类型,而是一个类,它被用来表示字符序列。字符本身符合 Unicode 标准,其初始化方式有两种。
    如:String greeting=“Good Morning! \n”;
           String greeting=new String(=“Good Morning! \n”);
String的特点是一旦赋值,便不能更改其指向的字符对象,如果更改,则会指向一个新的字符对象 。

StringBuffer是一个具有对象引用传递特点的字符串对象。
StringBuffer对象可以调用其方法动态的进行增加、插入、修改和删除操作,且不用像数组那样事先指定大小,从而实现多次插入字符,一次整体取出的效果,因而操作字符串非常灵活方便。
一旦通过StringBuffer生成最终想要的字符串,就可调用它的toString方法将其转换为一个String对象
作者: 李震 李震 李震    时间: 2012-3-26 08:28
效率问题,StringBuffer效率高于String,同时操作字符串而StringBuffer是在自己本身上进行操作,String操作时,每操作一个就要新增一个对象。
作者: lipanfeng    时间: 2012-3-26 08:40
String 一但生命在内存中是不可变的,StringBuffer则可以
作者: 一蓑烟雨任平生    时间: 2012-3-26 14:42
String:
为不可变对象,一旦被创建,就不能修改它的值.
  对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
  String 是final类,即不能被继承.
StringBuffer:
  是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
  它只能通过构造函数来建立,


作者: 李彬彬    时间: 2012-3-26 15:36
String:在String类中没有用来改变已有字符串中的某个字符的方法,由于不能改变一个java字符串中的某个单独字符,所以在JDK文档中称String类的对象是不可改变的。然而,不可改变的字符串具有一个很大的优点:编译器可以把字符串设为共享的。

StringBuffer:StringBuffer类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使用StringBuffer类的append方法追加字符 比 String使用 + 操作符添加字符 到 一个已经存在的字符串后面有效率得多。因为使用 + 操作符每一次将字符添加到一个字符串中去时,字符串对象都需要寻找一个新的内存空间来容纳更大的字符串,这无凝是一个非常消耗时间的操作。添加多个字符也就意味着要一次又一次的对字符串重新分配内存。使用StringBuffer类就避免了这个问题.




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