黑马程序员技术交流社区

标题: String和StringBuffer的用法,求高手指点 [打印本页]

作者: 李小锋    时间: 2012-12-13 10:14
标题: String和StringBuffer的用法,求高手指点
本帖最后由 李小锋 于 2012-12-13 18:51 编辑

String和StringBuffer的区别有哪些?具体什么时候使用它们呢?
作者: 轻松过关    时间: 2012-12-13 10:37
本帖最后由 吴愿涛 于 2012-12-13 15:36 编辑

如果字符串不需要经常改动就使用String,否则在单线程的情况下使用StringBuilder,多线程使用StringBuffer。
String相当于一个公共汽车,容量有限,而且固定了大小,每次添加内容都是改装了车体或者创建了新的公共汽车,StringBuffer是火车,在根据人流的多少可以随意增减车厢,当然单纯性能上来说String体积更小,但载客量有限。
作者: 张胜格    时间: 2012-12-13 10:43
两者在使用过程中有明显的不同:string类型的变量在内存中始终只占有一个内存地址,当对string类型的变量操作时,系统会在内存中创建一个副本,然后对这个副本进行操作,但是副本的内存地址和原string类型变量的内存地址是不同的,当操作完成后,原来的string类型变量在内存中会被删除掉,最后保留的是变量的副本,也可以说是变量的内存地址转移到副本上去了.所以讲string类型是个特殊的引用类型.stringbuffer是个真正的引用类型,在使用过程中,始终对同一个内存地址操作,一直到被释放掉为止,其占用的内存地址是固定不变的.综上所述不难看出,当我们要改变字符串的内容时,必须使用StringBuffer类型来定义字符串
作者: 婂埖糖    时间: 2012-12-13 10:48
1.String 对一串字符进行操作。不可变类。
2.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高:


作者: 梁胜海    时间: 2012-12-13 11:01
哎哟,不错喔
作者: 臧盼    时间: 2012-12-13 15:09
StringBuffer是使用缓冲区的,本身也是操作字符串的,但是与String类不同,String类的内容一旦声明自后则不可改变,改变的只是其内存地址的指向,而StringBuffer中的内容是可以改变的。
StringBuffer不能像String那样采用直接赋值的方式进行对象实例化,必须通过构造函数完成。
当一个字符串的内容需要被经常改变时就要使用StringBuffer
在StringBuffer中使用append()方法,完成字符串的连接操作
StringBuffer类中一些方法是String类中所没有的,包括:delete()、insert()等
作者: 李凯文    时间: 2012-12-13 16:08
String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。什么时候用就要看你需求了。
作者: luobo    时间: 2012-12-17 16:47
我的理解是string创建出的对象不会销毁  stringbuffer可以销毁




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