A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李小锋 中级黑马   /  2012-12-13 10:14  /  1656 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李小锋 于 2012-12-13 18:51 编辑

String和StringBuffer的区别有哪些?具体什么时候使用它们呢?

7 个回复

倒序浏览
本帖最后由 吴愿涛 于 2012-12-13 15:36 编辑

如果字符串不需要经常改动就使用String,否则在单线程的情况下使用StringBuilder,多线程使用StringBuffer。
String相当于一个公共汽车,容量有限,而且固定了大小,每次添加内容都是改装了车体或者创建了新的公共汽车,StringBuffer是火车,在根据人流的多少可以随意增减车厢,当然单纯性能上来说String体积更小,但载客量有限。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
两者在使用过程中有明显的不同:string类型的变量在内存中始终只占有一个内存地址,当对string类型的变量操作时,系统会在内存中创建一个副本,然后对这个副本进行操作,但是副本的内存地址和原string类型变量的内存地址是不同的,当操作完成后,原来的string类型变量在内存中会被删除掉,最后保留的是变量的副本,也可以说是变量的内存地址转移到副本上去了.所以讲string类型是个特殊的引用类型.stringbuffer是个真正的引用类型,在使用过程中,始终对同一个内存地址操作,一直到被释放掉为止,其占用的内存地址是固定不变的.综上所述不难看出,当我们要改变字符串的内容时,必须使用StringBuffer类型来定义字符串

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
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高:

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
哎哟,不错喔
回复 使用道具 举报
StringBuffer是使用缓冲区的,本身也是操作字符串的,但是与String类不同,String类的内容一旦声明自后则不可改变,改变的只是其内存地址的指向,而StringBuffer中的内容是可以改变的。
StringBuffer不能像String那样采用直接赋值的方式进行对象实例化,必须通过构造函数完成。
当一个字符串的内容需要被经常改变时就要使用StringBuffer
在StringBuffer中使用append()方法,完成字符串的连接操作
StringBuffer类中一些方法是String类中所没有的,包括:delete()、insert()等

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。什么时候用就要看你需求了。
回复 使用道具 举报
luobo 初级黑马 2012-12-17 16:47:50
8#
我的理解是string创建出的对象不会销毁  stringbuffer可以销毁
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马